我正在尝试编写一个查询,以便通过MFG / PRO发票表'idh_hist'搜索特定的日期范围。添加日期条件时运行速度非常慢。但是当我推迟日期条件时,速度非常快。你能否建议在idh_hist上写一个查询的方法,该查询在条件方面运行得相当快。
以下是我的查询:
for each idh_hist no-lock where idh_domain = "d0002"
and idh_due_date = TODAY:
/* display code here... */
end.
提前致谢!
数据库索引:
Flags Index Name Cnt Field Name
----- --------------------- ---- ---------------------
idh_fsm_type 4 + idh_domain
+ idh_fsm_type
+ idh_nbr
+ idh_line
pu idh_invln 4 + idh_domain
+ idh_inv_nbr
+ idh_nbr
+ idh_line
idh_part 4 + idh_domain
+ idh_part
+ idh_inv_nbr
+ idh_line
u oid_idh_hist 1 + oid_idh_hist
答案 0 :(得分:1)
您似乎没有使用idh_due_date的索引。您需要添加这样的索引。
4gl使用规则根据WHERE子句选择索引。最重要的规则是使用具有相等匹配的索引的主要组件。
您显示的查询在idh_domain上只有一个这样的匹配。因此,应用了违规规则。这将导致选择idh_invln索引。
实际上,为了满足您的查询,需要搜索与“idh_domain”字段匹配的所有记录。 (如果您只有一个域,这意味着您正在进行表扫描。)
您可能想在idh_domain和idh_due_date上添加索引。这将是您查询的完美匹配。