「マルチカラムインデックスの順番を意識しなくてもよくなる仕組み」的な説明がされることがあり、それはそれで間違いではないのかもしれません。マルチカラムインデックスの順序による制限を解消するものだと勘違いしてしまう可能性があります。動作イメージや利点を考えてみようと思います。前提に書いていこうと思います。減らすためという感じでしょうか。構造を書いておきます。図にすると次のような感じになります。サーバとストレージエンジンは構造的に分離されているということです(少々語弊があるかもしれませんが)。叩いてレコードを取ってきてもらいます。この際、ストレージエンジンから取得するデータ量(レコード数)は少ない方がパフォーマンスがいいです。サーバのバッファプールの消費量も抑えられます。インデックスについて言えることは、セカンダリインデックスからクラスタインデックスへのアクセスは少ない方がいいということです。カバリングインデックスでない限り、完全な行を取得するためにクラスタインデックスを辿る処理が必要です。この処理とそれに伴うディスクIOが大きなオーバヘッドになります。いう機能が実装されていて、このディスクIO時のランダムアクセスをシーケンシャル化してオーバヘッドを抑えられるみたいです。サーバ↔ストレージエンジン間の通信」と「セカンダリインデックス使用時のクラスタインデックスへのアクセス」はできる限り抑えたいという前提があります。サーバ自体は実際の行の取得に深く関与しません。サーバとストレージエンジンの2者の連携によって選択されます。具体例として、以下のようなクエリ(公式docに記載のクエリをちょっと変えたもの)を考えます。設定されているとします(以後、このインデックスを「midx」と呼びます)。使われることになるとします。図にすると以下のような感じになります。図では、該当するレコードが4件存在します。条件の評価をされていません。条件を評価して、条件を満たさないレコードを捨てます。図では最終的に1レコードが残ったとして、それがクライアントに返されています。サーバへの転送レコードとセカンダリインデックスからクラスタインデックスへのアクセス数は少ないほうがいいと書きました。ここでは1レコードをクライアントに返せばいいだけなのに、実際には4レコードもフェッチしています。それぞれのタイミングで3レコード分も無駄が発生しているのです。使うと先ほどの図は次のようになります。使わない場合との大きな違いは、セカンダリインデックスを走査している時にクエリの条件式を評価している点です。サーバ側からストレージエンジンにクエリの条件式を渡す(Pushdownする)ことで、走査のタイミングでWHERE条件の篩にかけることができます。条件式を満たさないレコードについては、フェッチせずに済むようになります。使う場合の図では、先ほどと比べて矢印の数が減っています。無駄な行フェッチを減らしてパフォーマンスを上げようよということですね。条件式はインデックス走査中に評価できません。カラムの値が含まれていないためです。いずれにせよクラスタインデックスへのアクセスは必要になります(減らすことはできますが)。式の評価もできるはずです。サーバ側からストレージエンジンに向けてリクエストが沢山飛んでいて、それに対するレスポンスが返っているとみるのが正確だと思います。よってそれが抑えられているということでもあります。使えば、ストレージエンジンの完全な行へのアクセスと、MySQLサーバ↔ストレージエンジン間のアクセスを抑えることができます。サーバのバッファプールの消費を抑えられます。使わずに大量に無駄レコードをフェッチするケースでは、ディスクIOで読んだレコード群を少しづつバッファプールにロードしたものの、ほとんどは条件判定で捨てられるという悲しいことが起きてしまいます。