ホームページ > データベース > 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 は効率的ではありません。パフォーマンスを向上させるには、NOT IN の代わりに EXISTS 演算子の使用を検討してください。

<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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート