小编Aqu*_*lex的帖子

RDBMS索引进度问题-供参考

我发现在Progress 10.1中,当在查询中使用多个索引时,数据库将使用索引列表中的第一个索引,而不是最优化的索引,也不是两个索引的子集。

其他人有没有经历过?

================================================== ===============

定义了几个索引,但我们正在查看的两个索引是:XIE1cac_role_person ownering_entity_mnemonic owning_entity_key role_key

XIE2cac_role_person contract_obj person_role_code Effective_from_date

最初,我的代码如下,它使用的是第一个索引,该索引返回的数据集更大。

FOR EACH cac_role_person NO-LOCK 
        WHERE cac_role_person.contract_obj = cbm_contract.contract_obj 
          AND cac_role_person.owning_entity_mnemonic = "BROKER"
          AND (
              (cac_role_person.effective_to_date > TODAY 
          AND  cac_role_person.effective_to_date >=  
               cbm_contract_component.contract_component_start_date)
           OR (cac_role_person.effective_to_date = ? 
          AND cac_role_person.effective_from_date <=                  
              cbm_contract_component.contract_component_start_date)
              ):
Run Code Online (Sandbox Code Playgroud)

所以我现在强迫它使用第二索引:

FOR EACH cac_role_person NO-LOCK USE-INDEX XIE2cac_role_person
        WHERE cac_role_person.contract_obj = cbm_contract.contract_obj 
          AND cac_role_person.owning_entity_mnemonic = "BROKER"
          AND (
              (cac_role_person.effective_to_date > TODAY 
          AND  cac_role_person.effective_to_date >=  
               cbm_contract_component.contract_component_start_date)
           OR (cac_role_person.effective_to_date = ? 
          AND cac_role_person.effective_from_date <=                  
              cbm_contract_component.contract_component_start_date)
              ):
Run Code Online (Sandbox Code Playgroud)

第一个代码在30小时内修复了约4000次,而改进后的12小时内修复了7万次。(循环是更大的部分的一部分,但这只是我需要加快处理17倍的更改

database progress-4gl progress-db openedge

1
推荐指数
1
解决办法
764
查看次数

标签 统计

database ×1

openedge ×1

progress-4gl ×1

progress-db ×1