首页 > 数据库 > mysql教程 > 如何通过过滤高效选出Oracle中前10条记录?

如何通过过滤高效选出Oracle中前10条记录?

Barbara Streisand
发布: 2025-01-18 15:31:16
原创
500 人浏览过

How to Efficiently Select the Top 10 Records in Oracle with Filtering?

Oracle数据库中高效筛选前10条记录:子查询和ROWNUM技术

本文旨在解决从HISTORY表中按STORAGE_GB排序,并排除符合特定条件的行,最终只选择前10条记录的问题。直接使用ROWNUM限制结果在排序之前会导致问题。

使用子查询的解决方案:

解决方案是创建一个子查询,根据所有条件(包括排序顺序)选择所需的记录。然后,使用该子查询作为数据源,利用ROWNUM选择前10行。

<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>
登录后复制

使用EXISTS进行优化:

对于大型数据集,Oracle的ROWNUM效率不高。考虑使用EXISTS运算符代替NOT IN以提高性能。

<code class="language-sql">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 NOT EXISTS (
    SELECT 1
    FROM HISTORY
    WHERE
      APP_ID = APP_ID
      AND TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') = '06.02.2009'
  )
ORDER BY STORAGE_GB DESC
FETCH FIRST 10 ROWS ONLY;</code>
登录后复制

(注意:LIMIT 10 在Oracle中不被直接支持,应使用 FETCH FIRST 10 ROWS ONLY替代)

通过以上方法,可以高效地从Oracle数据库中筛选出符合条件的前10条记录。 选择使用EXISTS的版本可以显着提升查询效率,尤其是在处理大型数据集时。

以上是如何通过过滤高效选出Oracle中前10条记录?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板