You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何确认查询是否使用临时表索引及编译器所用索引列表?

关于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 08:13:15