如何确认查询是否使用临时表索引及编译器所用索引列表?
关于Progress 4GL临时表索引的使用与查看方法
一、编译器如何利用你的索引
你定义的临时表TT_DATA主键索引TT_IDX1,字段顺序为TT_PART、TT_IN、TT_VEND,完全匹配FIND语句中的三个查询条件顺序。编译器会按以下逻辑使用该索引:
- 先通过
TT_PART = "015564"定位索引中对应值的起始范围 - 再在该范围内用
TT_IN = "VC"进一步筛选缩小数据集 - 最后通过
TT_VEND = "SUPPLIER"精准定位目标记录,彻底避免全表扫描(WHOLE-INDEX),这就是查询速度显著提升的核心原因
因为查询条件完全覆盖索引前缀字段且顺序一致,编译器会直接选择该索引执行高效查找。
二、查看查询所用索引的方法
除你提到的XREF外,有两种更直接的方式:
1. 使用SET STATISTICS IO ON命令
在代码开头添加该命令,执行后会在输出中显示查询使用的索引信息,包括索引名称、读取页数等。示例代码:
SET STATISTICS IO ON. DEFINE TEMP-TABLE TT_DATA NO-UNDO FIELD TT_PART AS CHARACTER FIELD TT_DESC AS CHARACTER FIELD TT_IN AS CHARACTER FIELD TT_VEND AS CHARACTER FIELD TT_GLOB AS CHARACTER FIELD TT_TYPE AS CHARACTER INDEX TT_IDX1 IS PRIMARY TT_PART TT_IN TT_VEND . FOR EACH <TABLE> NO-LOCK: FIND TT_DATA NO-LOCK WHERE TT_PART = "015564" AND TT_IN = "VC" AND TT_VEND = "SUPPLIER" NO-ERROR. IF AVAILABLE TT_DATA THEN DO: /*ACTUAL LOGIC GOES HERE*/ END. END.
执行后,控制台或日志会输出类似Using index TT_IDX1 for FIND on TT_DATA的明确信息。
2. 借助Progress Developer Studio(PDS)调试工具
若使用PDS开发,可通过调试查看执行计划:
- 启动调试,在
FIND语句处设置断点 - 程序停在断点时,打开“Execution Plan”窗口,里面会清晰显示当前查询使用的索引名称、查找方式等细节
补充说明
XREF工具确实无法详细列出有索引表的实际使用索引,但上述两种方法可直接获取所需信息。其中SET STATISTICS IO ON无需额外工具,在命令行或终端即可快速验证索引使用情况。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

