1. ホーム
  2. データベース
  3. マイサク

MySQLデータベース・インデックスの左端一致の原則

2022-01-06 08:10:15

I. ジョイント・インデックスの説明

3つのフィールドのジョイントインデックスを作成する

ジョイントインデックス(a,b,c)は、インデックスを作成することと同じである。(a),(a,b),(a,b,c) のようなインデックスを作成するのと同じです。

ii. そして、acはインデックス作成に使用できるのでしょうか?

Let's give the conclusion first: a can hit the joint index (a,b,c), c cannot, so the ac combination cannot hit the joint index.

1. abc ユニオンインデックス(県、市、区)を作成します。

ac インデックスクエリ

SELECT * FROM user_address WHERE province = 'Guangdong' 
AND district = '南雄市'


クエリの範囲がALLであることを表示

2. 両方のacフィールドに対してジョイント・インデックスを直接作成する。

SELECT * FROM user_address WHERE province = 'Guangdong' 
AND district = '南雄市'


このクエリの結果、refがインデックスを取得し、スキャンされた行の数は21から13になります。

3.abインデックスクエリ

クエリのスコープがref

結論

abcのジョイント・インデックス、acのcはこれら3つのフィールドのジョイント・インデックスにヒットすることはできませんが、aはできますので、possible_keys列はジョイント・インデックスが使用されていることを示します。

III. 思考

abcのインデックス、acbのインデックスになるのでしょうか?

  • 左端のプリフィックスマッチングの原則では、mysql は範囲クエリ (>, <, between, like) に遭遇するまで右側にマッチし続け、その後マッチングを停止します。
  • 例えば、a=3, b=4, c>5, d=6の場合、(a,b,c,d)の順番でインデックスを作成すると、dはインデックスされないが、(a,b,d,c)でインデックスを作成すると、すべて使用でき、a,b,dの順番も任意に調整することが可能である。
  • a=1 と b=2 と c=3 のように = と in の順番を変えて、(a,b,c) のインデックスを任意の順番で作成することができ、mysql のクエリオプティマイザがインデックスが認識する形に最適化するのを助けてくれます

IV. 左端一致の原理の発生

  • ジョイントインデックス、例えば:abcのようなジョイントインデックスは、aの上にbを構築し、bからcを構築するという順序で形成されていると理解できるので、順番に並べる必要があるため
  • 単純に、aをソートしてインデックスを作成し、bをaにソートし、cを作成する、と理解することができます。
  • つまり、ジョイントインデックスはレンジクエリに遭遇すると失敗し、後のインデックスは失敗するのです。

MySQLデータベースインデックスの左端一致の原理について紹介しました。MySQLインデックス左端一致の詳細については、スクリプトハウスの過去記事を検索するか、以下の関連記事を引き続き参照してください。