ホームページ  >  に質問  >  本文

MySQL の複数列インデックスではフィールドの順序は重要ですか?

私はインデックスの重要性と、結合順序によってパフォーマンスがどのように変化するかを知っています。複数列インデックスに関連する書籍をたくさん読みましたが、私の質問に対する答えが見つかりませんでした。

複数列インデックスを作成する場合、指定順序が重要かどうか知りたいです。私の推測は「ノー」で、エンジンはそれらを順序が重要ではないグループとして扱います。でも検証したいんです。

例: mysql Web サイト (http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html)

リーリー

いずれにせよ、次の方が優れている、または同等であり、何かメリットがあるでしょうか?

リーリー ###具体的には:### リーリー

比較

ああああ

P粉002023326P粉002023326385日前635

全員に返信(2)返信します

  • P粉317679342

    P粉3176793422023-10-22 18:13:12

    2 つのインデックスは異なります。これは、MySQL やその他のデータベースにも当てはまります。 MySQL の違いについては、 ドキュメント .

    で説明されています。

    2 つのインデックスを考えてみましょう:

    リーリー

    どちらも次の場合に同様に適用されます:

    リーリー

    idx_lf は次の場合に最適です:

    リーリー

    idx_fl は次の状況に最適です:

    リーリー

    このようなケースの多くでは、 2 つのインデックスを使用することができますが、そのうちの 1 つが最適です。たとえば、idx_lf クエリの使用を検討してください: リーリー

    MySQL は idx_lf を使用してテーブル全体を読み取り、

    order by の後でフィルタリングできます。これは実際には最適化オプション (MySQL の場合) ではないと思いますが、他のデータベースでは起こる可能性があります。

    返事
    0
  • P粉899950720

    P粉8999507202023-10-22 17:10:53

    複数列インデックスについて説明するとき、私は電話帳に例えて説明します。電話帳は基本的に、姓、名の順に構成されるインデックスです。したがって、ソート順序は、どの「列」が最初に来るかによって決まります。検索は次のカテゴリに分類されます:

    1. スミスという姓の人を探している場合、この本は姓でソートされているため、簡単に見つけることができます。

    2. ジョンという名前の人を探している場合、電話帳は役に立ちません。ジョンという名前が本のあちこちに散在しているからです。見つけるには電話帳全体をスキャンする必要があります。

    3. 特定の姓がスミスで、特定の名がジョンである人を探している場合、この本が役に立ちます。スミスが一緒に並べ替えられ、スミスの中でジョンも並べ替えられていることがわかるからです。現れる。###

    名、姓の順に並べ替えられた電話帳がある場合、電話帳の並べ替えは、上記のケース #2 と #3 では役立ちますが、ケース #1 では役に立ちません。

    これは正確な値を見つける場合について説明していますが、値の範囲で検索する場合はどうなるでしょうか?名が John で、姓が「S」で始まるすべての人物 (Smith、Saunders、Staunton、Sherman など) を検索するとします。ジョンは各姓内の「J」でソートされますが、すべての姓が「S」で始まるすべてのジョンが必要な場合、ジョンはグループ化されません。それらは再び分散されるため、最終的には姓が「S」で始まるすべての名前をスキャンする必要があります。ただし、電話帳が名、姓の順に編成されている場合、すべての John がグループ化され、John 内ではすべての「S」姓がグループ化されることがわかります。

    したがって、複数列インデックス内の列の順序は絶対に重要です。クエリの種類によっては、インデックスの特定の列順序が必要になる場合があります。複数の種類のクエリがある場合は、それらを支援するために、列の順序が異なる複数のインデックスが必要になる場合があります。

    詳細については、私のプレゼンテーション

    実際にインデックスを設計する方法 を読むか、ビデオをご覧ください。

    返事
    0
  • キャンセル返事