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インデックス左端一致の詳細については、スクリプトハウスの過去記事を検索するか、以下の関連記事を引き続き参照してください。
関連
-
MySQL Innodb インデックスメカニズム詳細解説
-
MySQLのLike演算子に関する詳細
-
MySql認証ベースのvsftpd仮想ユーザー
-
MySQLによる既存テーブルのパーティショニングの実装
-
面接では選択式で聞かれましたが......。.for updateはテーブルをロックするか、行をロックするか?
-
[解決済み】DynamoDB : 提供されたキー要素がスキーマと一致しません。
-
[解決済み】MySQLで「すべての派生テーブルは独自のエイリアスを持つ必要があります」というエラーは何ですか?
-
SQLException。オペランドは1列でなければなりません。
-
SQL Server のトランザクションは、try キャッチに記述しなければ、中間ステートメントがエラーを報告してもコミットされます。
-
msql クエリでのエラー 'where 節' の不明な列 'yellow fruit'
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQLデータベースでvarchar型の数値の大きさを比較する方法
-
MySQLで正規表現を使う 詳細
-
MySQLデータベースで数百万件のデータを10秒間で挿入
-
[解決済み】文字列からuniqueidentifierに変換する際に変換に失敗する - 2つのGUIDの場合
-
[解決済み] SQLエラー。ORA-01861:リテラルは、フォーマット文字列01861に一致しません。
-
mysql5.7のインストールと、無料・長期利用を目的としたNavicateの導入プロセスについて
-
Mysql がエラーを報告 オペランドには 1 つのカラムが含まれている必要があります。
-
Mysql がエラー 1241 を報告 オペランドは 1 つのカラムを含む必要があります。
-
群関数解の無効な使用
-
mysql がエラーを報告します。不明な文字セットです。'utf8mb4'