2016-08-17 15 views
-1

SQLでの索引の使用とORDER BY句の使用の違いは何ですか?SQLの索引とORDER BY句

私は理解しているので、インデックスは、クエリエンジンがテーブルをすばやく調べて(テーブルスキャンを防止するのに役立つ)順序付けられた方法で指定された列を並べ替えます。

私の質問 - パフォーマンスを向上させるためにクエリエンジンが単にORDER BYを使用できないのはなぜですか?

ありがとうございます!

+2

2つの非常に異なるものです。正しく順序づけられたインデックスは、クエリが実行されるたびに注文を処理する必要がないので、オーダーで使用することができます。 – TZHX

+0

Ok、あなたは2つの非常に異なるものだと言いますか? 意味 - ORDER BY - クエリ データを格納するインデックス方法。 これが正しければ、私は今なぜこの投稿が間違っているのか分かりました。 – mal

答えて

0

タグをsql-server-2008として配置しますが、質問はSQLサーバーとは関係ありません。この質問はすべてのデータベースに適用されます。ウィキペディアから :

インデックスは、いくつかのストレージエンジンが データベースのパフォーマンスを向上させるために使用テクニックです。 プロパティを共有する多くの種類のインデックスは、 クエリを実行するときにすべてのエントリを調べる必要性を軽減します。大規模なデータベースでは、クエリの時間/コストは、 の規模で減少する可能性があります。インデックスの最も単純な形式は、値が の並べ替えられたリストです。これは、ブックの背後のインデックスに類似した、エントリの場所への隣接参照を持つバイナリ検索を使用して検索できます。同じデータに複数の索引を作成できます(従業員データベースは姓と雇用日で索引付けできます)。

SQLの世界ではStackExchange

の関連スレッドから、順序は、データのセットの固有の特性ではありません。 したがって、 ORDER BY句を使用してデータを照会する場合を除き、データが の順番に、または一貫した順序で返されることは、RDBMSから保証されません。

インデックスが必要な理由は何ですか?

  1. すべてのエントリを調べる必要性が減ることに関する索引付けに関する太字のテキストに注意してください。 ORDER BYがSQLで発行されたときに索引が存在しない場合は、すべての項目を検査して項目数を増やす必要があります。
  2. ORDER BYは、読み取り時にのみ適用されます。索引には単一の列を使用できます。この場合、SQL問合せ要求にはいくつかの異なる種類の順序が存在する可能性があります。クエリ要求の仕方を理解していない限り、インデックスを定義することはできません。
  3. 新しいパターンのクエリが出現すると、多くの時間インデックスが追加され、クエリのパフォーマンスが維持されます。インデックス作成は、ORDER BYをSQLで定義した方法によって行われます。
  4. ORDER BYの有無にかかわらずSQLを処理するクエリエンジンは、実行計画を定義し、データの格納を理解しません。クエリエンジンから取得されたデータは、データがキャッシュ内にあって、部分的に/完全にディスクからのものであった場合、部分的にメモリから取得されることがあります。ストレージエンジンでディスクから読み込むと、索引を使用して素早く読み取られたデータが表示されます。
  5. ORDER BYは、読み取り時にクエリのパフォーマンスに影響します。インデックスは、作成、読み取り、更新、および削除操作をすべて実行するときにクエリのパフォーマンスに影響します。
  6. クエリエンジンは、インデックスを使用するか、データの特性に基づいてインデックスを完全に無視するかを選択できます。