【发布时间】:2016-07-16 02:12:58
【问题描述】:
如何优化下面的查询时间(超过1h)?我只能访问表视图,无法检查查询计划和视图索引。我只能更改查询符号。表“c”有超过 32 亿条记录。
SELECT
a.APPLICATIONNUMBER,c.NEWSTATUSSYMBOL,c.MODDATE,c.NEXT_MODDATE
FROM a
LEFT JOIN
(SELECT
c000.ID,c000.NEWSTATUSSYMBOL,c000.MODDATE,c000.NEXT_MODDATE
FROM
(SELECT
c00.ID,c00.NEWSTATUSSYMBOL,c00.MODDATE,LEAD(c00.MODDATE,1) OVER (ORDER BY c00.ID, c00.MODDATE) AS NEXT_MODDATE
FROM
(SELECT
c0.ID,c0.STATUSSYMBOL,c0.NEWSTATUSSYMBOL,c0.MODDATE
FROM c0
WHERE (c0.STATUSSYMBOL in ('State1','State2','State3') OR c0.NEWSTATUSSYMBOL in ('State1','State2','State3'))
AND c0.TYPEID = 1
AND c0.HDB_START >= '15/01/01'
AND c0.HDB_LAST = 'Y')c00
)c000
WHERE
c000.NEWSTATUSSYMBOL in ('State1','State2','State3')) c
ON a.ID = c.ID
WHERE
a.APPLICATIONNUMBER like 'P%'
AND a.APPLICATIONSTATUSSYMBOL in ('State4','State5','State6')
AND a.APPLICATIONDATE >= to_timestamp('2015-01-01 00:00:01')
AND a.MODIFIEDDATE >= to_timestamp('2016-07-04 00:00:01')
AND a.MODIFIEDDATE <= to_timestamp('2016-07-10 23:59:59')
AND a.HDB_LAST = 'Y';
【问题讨论】:
-
请使用谓词发布计划查询
-
我在 db 中无权检查查询计划 :(
-
我想索引在 a.ID、c.ID、c0.HDB_START 上。
-
那么你不应该做数据库优化。就像试图让汽车更快地改变油漆一样。你需要调整引擎。
-
可惜了。想想看。我们不确切知道存在哪些索引、访问路径和过滤器。我可以说超过 10 种情况,从不正确的语法到 Oracle 错误(难以检测)和收集到的直方图统计数据错误。
标签: sql oracle optimization