Oracle:按日期排序和rownum = 5000表现不佳

时间:2012-08-27 16:16:52

标签: oracle

有人可以向我解释为什么当我按日期将asc或desc命令放入任何查询语句时。它会大大减慢性能吗?

通常声明就像这样

select * from table where ... order by modified_data asc

缓解此问题的最佳方法是什么?我按日期删除订单的那一刻,性能会提高很多。

3 个答案:

答案 0 :(得分:4)

这取决于查询计划,索引中的modified_date以及您拥有的其他谓词。但是,通常,添加ORDER BY要求Oracle在返回结果之前对结果进行排序。反过来,这通常要求Oracle在返回任何行之前完全实现结果集。如果您要测量返回第一行所需的时间,而不是返回最后一行所需的时间,则会放大效果。

这不是一般的缓解问题。如果需要排序结果集,则会产生排序结果集的开销。否则,你没有。在特定情况下,可能会添加一些索引,这些索引将允许Oracle按排序顺序获取结果,而不是对结果进行物理排序。但这取决于您未提及的一系列特定于查询的因素。

答案 1 :(得分:1)

排序需要花费时间,尤其是必须首先构建整个结果集,然后才能开始排序。如果字段modified_data将被编入索引,则情况并非如此。

答案 2 :(得分:0)

尝试在表的id上创建索引。如果您不需要所有列,也可以在select列中更改select *。