「ルーズインデックススキャン」がないため、MySQLが2つの範囲条件でインデックスを使用できないことを読んでいました。
"Loose Index Scan"はどういう意味ですか?
High Performance MySQL 第3版から、
Loose Index ScansMySQLは歴史的に、インデックスの不連続な範囲をスキャンする緩いインデックススキャンを行うことができませんでした。 MySQLのインデックススキャンでは、通常、クエリで実際に必要な非連続の行が数行しかない場合でも、インデックスの開始点と終了点を定義する必要があります。 MySQLはこれらのエンドポイント内の行の範囲全体をスキャンします。
loose index scanは、単にインデックスの一部をスキップするスキャンです。それはどのように行うのですか? (a,b)
のインデックスを想定すると、ルーズインデックススキャンにより、b
のすべての値をスキャンすることなく、b
の特定の値をクエリできます。これは、b
検索の範囲の先頭から開始し、後方にスキップして新しいa
を見つけることによって行われます。これを、インデックス全体がスキャンされ、バックトラックがない(タイトな)インデックススキャンと比較してください。
このコンテキストでのバックトラッキングは、通常、ツリーを上に(前に)前の位置に移動することを意味します。
「ルーズインデックススキャン」がないため、MySQLが2つの範囲条件でインデックスを使用できないことを読んでいました
それが本当だったとは思いません。それ(ほとんどのRDBMS)はインデックスを使用できますが、ルーズインデックススキャンの実装なしでは、全体をスキャンする必要がありましたIndex-only scanのようなインデックス。これにより、テーブルを訪問する必要がなくなります。これは、選択性が低い場合、またはインデックスがテーブルのサイズに十分に近く、それが問題ではない場合に、(とにかくテーブルにアクセスする必要がある場合に)望ましいアクションである場合とそうでない場合があります。 。
脚注