【发布时间】:2019-01-16 01:03:59
【问题描述】:
以下代码是选择每个 CID 的最新数据的查询。但查询速度很慢(大约 4 秒)。
表格信息
CID, GATH_DTM(datatype: date) 是PK。
DATA_STAT_CODE 是一个标志。
索引:列
- PK_020:CID,GATH_DTM
- IDX_020_STAT_CODE:DATA_STAT_CODE、CID、GATH_DTM
- TABLE_INDEX : GATH_DTM
- ACCUM_IDX:ACCUM_QTY
优化器计划结果
- 哈希分组方式:索引范围扫描
- 嵌套循环:索引范围扫描
选择结果
SELECT COUNT(*) FROM tb_020; and SELECT COUNT(*) FROM tb_020 WHERE DATA_STAT_CODE = 28001;
3591336
SELECT COUNT(*) FROM tb_020; and SELECT COUNT(*) FROM tb_020;
4179537
SQL
SELECT *
FROM TB_020 E,
(SELECT /*+ INDEX(TB_020 IDX_020_STAT_CODE)*/
CID,
MAX(GATH_DTM) GATH_DTM
FROM TB_020
WHERE DATA_STAT_CODE=28001
GROUP BY CID
) J
WHERE E.GATH_DTM=J.GATH_DTM
AND E.CID =J.CID
我想提高性能。
【问题讨论】:
-
您有多个查询。您希望在哪个方面提高性能?
-
@GordonLinoff 哦,我要 SQL1(现在是 SQL,删除 SQL2)
-
使用 ANSI JOIN 语法。内部联接 。您正在使用旧的 JOIN 语法
-
@VenkataramanR 是的,我已经尝试过了。但性能仍然相同。
-
@sw.jeong,我并不是从性能的角度来看 ANSI JOIN 语法。在代码可维护性和代码过时以及遵守标准方面更多。