1

有人可以向我解释为什么当我按日期 asc 或 desc 对任何查询语句进行排序时。它会大大降低性能吗?

通常语句会是这样的

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

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

4

3 回答 3

4

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

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

于 2012-08-27T16:33:42.950 回答
1

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

于 2012-08-27T17:33:38.360 回答
0

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

于 2014-09-05T08:01:15.743 回答