【问题标题】:ORDER BY performance when executing a query in Oracle在 Oracle 中执行查询时的 ORDER BY 性能
【发布时间】:2017-11-23 21:45:59
【问题描述】:

我一直在开发一个连接到 Oracle 数据库的 Spring 应用程序。

三年后,我们表中的记录量如此之大,以至于查询的响应时间如此糟糕,我们的客户很不满意。

所以,我搜索了got this URL for Oracle performance tuning

当响应时间很重要时,此 URL 的因子 22 告诉不要在查询中使用 ORDER BY。因此,如果我在查询中省略 ORDER BY,则响应时间是 ORDER BY 的一半以上。

但我不能在查询中省略 ORDER BY,因为客户需要排序。

如何解决我的问题,以便我有订购和响应时间?

【问题讨论】:

  • 你应该更新你的问题添加一个表模式,查询..和执行计划
  • 有些顾问只做 Oracle 性能调优就过得很好:如果调优是做这个don'的问题,他们就做不到在任何情况下都不要这样做。在此站点上搜索[oracle]+[performance],您会发现我们为像您这样的寻求者提供了相同的建议。性能与细节有关:准确的查询、实际的执行计划、数据的数量和偏差、环境本身。如果没有这些细节,您的问题将无法回答。
  • 任何简单地说“不要使用 ORDER BY”的人都没有抓住重点。性能调优是关于优化您的查询以尽可能高效地满足您的要求。不幸的是,性能问题的答案几乎总是“取决于”。取决于所有@APC 所说的以及您的硬件配置文件和网络。这就是性能专家收取高额费用的原因——这很难。

标签: sql oracle performance hibernate sql-order-by


【解决方案1】:

这个 URL 的因子 22 告诉不要在查询中使用 order by 当响应时间很重要时,我会从查询中省略 order by 这个响应时间比第一个多一半

在互联网上,您应该始终质疑收到的每条建议。

为了使 ORDER BY 子句更快,您需要使用正确的索引。确保使用数据库索引完成排序,从而避免全表扫描或显式排序操作。如有疑问,只需在 Markus Winand's Use the Index Luke site 上搜索 SQL 性能问题,或者阅读他的 SQL Performance Explained 书籍更好。

因此,您应该确保缓冲池已正确配置,并且您有足够的 RAM 来保存数据工作集和索引。

如果您确实有大量数据(例如数十亿条记录),那么您应该使用分区。否则,对于数千万或数亿条记录,您可以使用更多 RAM 进行垂直扩展。

另外,请确保使用紧凑的数据类型。例如,不要将 Enum 序数值存储到 32 位整数值中,因为单个字节可能足以存储您可能使用的所有 Enum 值。

【讨论】:

    【解决方案2】:

    Markus Winand 在他的博客中提到的使用流水线订单的最佳解决方案之一,在 link 中有详细说明

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      • 1970-01-01
      • 2022-11-19
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      相关资源
      最近更新 更多