ホームページ > データベース > mysql チュートリアル > 特定の条件と順序で上位 10 件の Oracle レコードを効率的に選択するにはどうすればよいですか?

特定の条件と順序で上位 10 件の Oracle レコードを効率的に選択するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-18 15:47:12
オリジナル
590 人が閲覧しました

How to Efficiently Select the Top 10 Oracle Records with Specific Conditions and Ordering?

Oracle クエリの最適化: 条件を使用して上位 10 レコードを選択する

Oracle データベースのクエリでは、多くの場合、特定の基準と希望の順序に基づいて限られた数のレコードを取得する必要があります。 LIMIT を追加の条件とともに使用するだけで、特に順序付けが関係する場合、予期しない結果が生じることがあります。この記事では一般的なシナリオに対処し、最適化されたソリューションを提供します。

課題は、HISTORY テーブルから上位 10 レコードを STORAGE_GB 順に選択し、特定の 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 INNOT EXISTS に置き換えて、潜在的なデカルト積の問題を回避し、実行の高速化につながります。

  • RANK() ランク付き選択の関数: RANK() 関数は、STORAGE_GB の順序に基づいて各レコードにランクを割り当てます。 ランクが 10 以下のレコードを選択すると、上位 10 位を取得するためのより効率的な方法が提供されます。

これらの最適化されたアプローチを使用すると、正しい順序を維持し、パフォーマンスのボトルネックを回避しながら、Oracle の上位 10 レコードを効率的に取得できます。

以上が特定の条件と順序で上位 10 件の Oracle レコードを効率的に選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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