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 IN
を NOT EXISTS
に置き換えて、潜在的なデカルト積の問題を回避し、実行の高速化につながります。
RANK()
ランク付き選択の関数: RANK()
関数は、STORAGE_GB
の順序に基づいて各レコードにランクを割り当てます。 ランクが 10 以下のレコードを選択すると、上位 10 位を取得するためのより効率的な方法が提供されます。
これらの最適化されたアプローチを使用すると、正しい順序を維持し、パフォーマンスのボトルネックを回避しながら、Oracle の上位 10 レコードを効率的に取得できます。
以上が特定の条件と順序で上位 10 件の Oracle レコードを効率的に選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。