Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL の使用法 » データのクエリと変更 » データのクエリ » ORDER BY 句:結果の順序付け

 

インデックスの使用による ORDER BY のパフォーマンス改善

SQL Anywhere データベース・サーバで ORDER BY 句を使用してクエリを実行するときに、複数の方法が考えられる場合があります。インデックスを使用すると、データベース・サーバがより効率的にテーブルを検索できるようになります。

WHERE 句と ORDER BY 句を使ったクエリ

複数の実行方法があるクエリの一例は、WHERE 句と ORDER BY 句の両方を含むクエリです。

SELECT *
   FROM Customers
   WHERE ID > 300
   ORDER BY CompanyName;

この例で、SQL Anywhere は次の 2 つの方法のどちらを採用するか決定する必要があります。

  1. Customers テーブル全体を、会社名の順序で検索し、各ローの顧客の ID の値が 300 以上かどうかをチェックする。

  2. ID カラムのキーを使用して、300 を超える ID を持つ会社だけを読み込む。結果を会社名順にソートする必要があります。

ID 値が 300 を超える会社がほとんどない場合は、2 番目の方法の方が優れています。スキャンするローの数が少なく、ソートにも時間がかからないからです。大半の会社の ID 値が 300 を超える場合は、ソートの必要がない最初の方法の方がはるかに優れています。

問題の解決

ID と CompanyName の 2 つのカラムでインデックスを作成すれば、上の例を解決できます。SQL Anywhere は、このインデックスを使用してテーブルからローを適切な順序で選択できます。ただし、インデックスはデータベース・ファイルの領域を消費し、更新にオーバヘッドがかかることは覚えておく必要があります。インデックスの作成は慎重に行ってください。インデックスの使用を参照してください。