【发布时间】:2017-07-15 09:51:29
【问题描述】:
能否请教一下如何让这个查询的执行速度比目前更快?
T2.ADI is indexed on TABLE2
T1.ADI is indexed on TABLE1
T1.RC AND T1.BEG_DT_TM is composite indexed on TABLE1
我还能做些什么来让它更快吗?
SELECT T1.ASI, T1.RC, T1.BEG_DT_TM
FROM TABLE1 T1
INNER JOIN TABLE2 T2
ON T2.ADI = T1.ADI
AND T2.END_DT_TM > T1.BEG_DT_TM
AND T2.BEG_DT_TM <= T1.END_DT_TM
WHERE T1.RC IN (12345, 56764460, 49862, 375723)
AND T1.BEG_DT_TM >=
AND T1.BEG_DT_TM <=
AND T1.END_DT_TM >=
AND T1.END_DT_TM <=
【问题讨论】:
-
我假设你运行了一个解释计划来查看大部分时间都花在了哪里。你能告诉我们这里吗?那么 - 统计数据是最新的吗?在任何情况下,无论其他任何事情,连接条件都会使查询变慢。
-
感谢@mathguy,我在上面的更新中附上了解释计划
-
这是什么“AND T1.BEG_DT_TM >=”?缺少右侧条件。 “更快”是什么意思?多久时间?表和结果集中有多少行?
-
感谢@OldProgrammer 更快意味着我想减少返回行所需的时间。目前,如果通过运行 alter system flush shared_pool 没有缓存查询,则返回 15,000 行大约需要 13 秒;并更改系统刷新缓冲区缓存;
-
要返回大量数据。由于我们不知道这个查询是如何执行的,(什么库,编程环境?)无法确定执行查询与将结果返回到主机环境的时间的哪一部分。您需要运行Trace and tkprof 以获取更多详细信息。
标签: sql oracle optimization query-performance