【发布时间】:2013-07-06 19:17:17
【问题描述】:
我发现,在 Progress 10.1 中,当查询中使用多个索引时,数据库将使用索引列表中的第一个索引,而不是最佳索引,也不是两个索引的子集。
有其他人经历过吗?
================================================ ==================
定义了几个索引,但我们正在查看的两个是: XIE1cac_role_person 拥有实体助记符 拥有实体密钥 角色键
XIE2cac_role_person contract_obj person_role_code 生效日期
最初我的代码如下,它使用第一个索引返回更大的数据集。:
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)
):
所以我现在强制它使用第二个索引:
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)
):
第一个代码在 30 小时内完成了大约 4000 个修复,改进后在 12 小时内修复了 70000 个。 (循环是更大部分的一部分,但这只是我需要将处理速度提高 17 倍的更改
【问题讨论】:
标签: database progress-4gl openedge progress-db