に詳細に説明されています。電話帳は、基本的に姓と名の索引です。したがって、並べ替えの順序は「列」が最初であることによって決まります。検索はいくつかのカテゴリに分類されます:
- 姓がスミスの人を検索すると、その本が姓でソートされているため、簡単に検索できます。
- 名前がJohnの人を探すと、電話帳はその本の中に散らばっているので、電話帳は役に立ちません。電話帳全体をスキャンする必要があります。
- 特定の姓のSmithと特定のファーストネームのJohnを検索すると、Smithが一緒にソートされていることがわかり、そのSmithsのグループ内でJohnsもソートされた順序で検索されます。
電話帳が名字でソートされている場合は、上記のケース#2と#3ではソートが役立ちますが、ケース#1ではサポートされません。
これは、正確な値を検索する場合について説明しますが、値の範囲を参照する場合はどうなりますか?あなたはファーストネームがJohnで、最後の名前が 'S'(Smith、Saunders、Staunton、Shermanなど)で始まるすべての人物を探したかったとします。ジョンはそれぞれの姓の中でJの下でソートされますが、すべてのジョンをSで始まるすべての姓にしたい場合、ジョンは一緒にグループ化されません。彼らは再び散在しているので、最後に「S」で始まるすべての名前をスキャンする必要があります。一方、電話帳が名字で構成されていた場合は、すべてのJohnsを一緒に見つけて、Johns内でSのすべての姓をグループ化します。
したがって、複数列インデックスの列の順序は重要です。 1つのタイプの問合せでは、索引に対して特定の列順序が必要な場合があります。いくつかのタイプのクエリがある場合は、それらを支援するために複数のインデックスが必要な場合があります。
詳細および例については、私のプレゼンテーションHow to Design Indexes, Reallyを参照してください。または、私のプレゼンテーションをvideoで見てください。
最初のステートメントには1つのインデックスしか作成されていません。これはlast_name、first_name、initialに基づいて電話帳を検索するようなものです。 2番目のステートメントは、2つの電話帳のようになります.1つはlast_nameで、もう1つはfirst_nameによるブックです。 – Glenn
[この質問の回答を参照してください。それは彼らのインデックスについて述べました。](http://stackoverflow.com/questions/13892952/database-schema-confusing-index-and-constraints) –