优化 Oracle 查询:选择有条件的前 10 条记录
Oracle 数据库查询通常需要根据特定条件和所需顺序检索有限数量的记录。 简单地使用 LIMIT
和附加条件有时会产生意想不到的结果,特别是在涉及排序时。本文针对常见场景并提供优化的解决方案。
挑战在于从 HISTORY
表中选择按 STORAGE_GB
排序的前 10 条记录,同时排除具有特定 APP_IDs
的记录。 直接使用 LIMIT
的幼稚方法可能会导致结果混乱。
解决方案:通过子查询实现精确排序
为了在限制结果之前确保正确的排序,我们使用了子查询。此方法优先考虑过滤和排序,然后应用限制。细化查询如下:
<code class="language-sql">SELECT * FROM ( SELECT DISTINCT APP_ID, NAME, STORAGE_GB, HISTORY_CREATED, TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') AS HISTORY_DATE FROM HISTORY WHERE STORAGE_GB IS NOT NULL AND APP_ID NOT IN ( SELECT APP_ID FROM HISTORY WHERE TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') = '06.02.2009' ) ORDER BY STORAGE_GB DESC ) WHERE ROWNUM <= 10;</code>
增强的表演技巧
为了提高查询效率,请考虑以下替代方案:
NOT EXISTS
用于优化过滤: 将 NOT IN
替换为 NOT EXISTS
以防止潜在的笛卡尔积问题,从而加快执行速度。
RANK()
排名选择函数: RANK()
函数根据 STORAGE_GB
顺序为每条记录分配排名。 选择排名小于或等于 10 的记录提供了一种更有效的方法来检索前 10 名。
通过使用这些优化的方法,您可以高效地检索 Oracle 中的前 10 条记录,同时保持正确的顺序并避免性能瓶颈。
以上是如何高效筛选出特定条件、排序的前10条Oracle记录?的详细内容。更多信息请关注PHP中文网其他相关文章!