在一个表的 XREF 中找到多个索引 - PROGRESS 4GL

问题描述 投票:0回答:1

从下面的查询中,表 tdfmstr 使用两个索引和添加的条件(所有条件都是必需的)。编译后,我检查了查询的 XREF。我可以看到编译器选择了 2 个索引 opvdor 和 opsellord。

您能告诉我编译器是使用两个索引还是仅使用第二个索引(opsellord)?如果我通过在查询中提及 use-index opvdor 对编译器说仅使用第一个索引怎么办?我知道强制编译器不是一个好的选择,但在这种情况下,我不确定此查询将如何处理更大的记录并且不会导致任何性能问题。

索引

**opvdor**                     3 + tdfcust     
                                  + tdfnum  
                                  + tdfseq
                                                    
**opsellord**                 3 + tdfcust     
                                  + tdfpart    
                                  + tdfvend

查询

for each tdf_mstr
  where tdfmstr.tdfcust = "SALES"
  and   tdfmstr.tdfnum  = "1"
  and   tdfmstr.tdfseq  = 455
  and   tdfmstr.tdfpart = "TEST"
  and   tdfmstr.tdfglob = ""
  and   tdfmstr.tdfvend = "TOYOTA"
  and   tdfmstr.tdfeed  = "X"
no-lock
use-index opvdor: /*Forcibly given to use 1st Index*/

end.

外部参照结果

916 SEARCH edb.tdf opvdor

916 SEARCH edb.tdf opsellord
openedge progress-4gl
1个回答
0
投票

使用两个索引应该是一个好处,而不是一个问题。我不明白为什么你想强制查询降低效率。您显示的 WHERE 子句在两个索引中的所有字段上都具有相等匹配,这应该是理想的。

如果您不确定,请运行一些测试用例并跟踪响应时间。或者,如果您想要真正喜欢,请使用 -zqil 启动参数来报告运行时行为。

© www.soinside.com 2019 - 2024. All rights reserved.