H 我试图弄清楚为什么两个相似但略有不同的 SQL 查询在运行它们所花费的时间之间存在如此大的差异。 我将不胜感激根据以下两个示例和报告的时间提供的信息。
第一个查询如下,运行大约需要 115 - 154 秒。
SELECT * FROM
(
SELECT a.*, ROWNUM rnum
FROM
(
SELECT ERR_ID, ERR_CREATED_BY,TO_CHAR(ERR_CREATED_DATE, 'DD/MM/YYYY H24:MI'),
ERR_SOURCE, ERR_DETAIL
FROM tdsys_errors err
WHERE ERR_SOURCE = 'Online Transaction'
ORDER BY ERR_ID DESC
) a
WHERE ROWNUM <= 25
)
WHERE rnum > 0;
第二个查询在“ORDER BY ERR_ID DESC” block 的位置上有轻微的变化,运行大约需要 0.07 秒
SELECT * FROM
(
SELECT a.*, ROWNUM rnum
FROM
(
SELECT ERR_ID, ERR_CREATED_BY,TO_CHAR(ERR_CREATED_DATE, 'DD/MM/YYYY H24:MI'),
ERR_SOURCE, ERR_DETAIL
FROM tdsys_errors err
WHERE ERR_SOURCE = 'Online Transaction'
) a
WHERE ROWNUM <= 25
)
WHERE rnum > 0
ORDER BY ERR_ID DESC;
我猜第二个查询是在结果到达之后排序的,而第一个查询试图一次完成所有操作。 这是我想知道的 SQL 最佳实践案例吗?为什么会有这样的差异?
谢谢
最佳答案
您自己的总结是正确的,第一个查询按 err_id 对来自 tdsys_errors 的行进行排序,获取其中的前 25 个行,然后返回这些行。第二个查询只输出 25 行(不保证顺序),然后对这 25 行随机排序。
关于sql - Oracle SQL查询查询稍有改动导致结果返回时间差异大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10231423/