プログラマーの雑レポート

脳死で読めるコードを書きたい

MySQL カバリングインデックス(クエリ・インデックス最適化)




先輩に教えていただいたので、メモ程度に残しておくー

 

カバリングインデックスとは

公式には下記のように記載がある。

インデックスに結果セットに必要なすべてのカラムが含まれている (カバリングインデックスと呼ばれます) 

クエリーによって取得されたすべてのカラムを含むインデックス

MySQL :: MySQL 8.0 リファレンスマニュアル :: MySQL 用語集

MySQL :: MySQL 8.0 リファレンスマニュアル :: 8.5.6 InnoDB クエリーの最適化

 

うん、いまいちピンとこない。

 

おそらく。

クエリを処理する際に、参照する全てのカラムにインデックスが効いている状態のことをカバリングインデックスというんだと思う。

カバリングインデックス状態のクエリ。という言い方だとしっくりくる。(勝手に解釈)

「参照する全て」というのは、SELECTやWHERE,ORDERなどのクエリ上で使用する全ての句のこと。

 

なぜパフォーマンスが良くなるのかは、リファレンス記載の通りで、クエリは全てインデックスを使用して読み取りを行うため、読み取りデータが大幅に減らすことができるから。っぽい

クエリーはテーブルデータをまったく読み取らなくても済む可能性があります。

 

例で考えてみる

サンプルテーブル

 

カバリングインデックスではないクエリ

selectで * を使用しているので、インデックスを張っていないカラムが指定されている

カバリングインデックスであるクエリ

クエリの指定されている全てのクエリは、インデックスを張っているカラムのためOK

 

終わり

ただ無闇にインデックスを張ればいいという話ではないので、適切にインデックスを張りつつ、クエリを最適化していきたいですね。

 

参考

MySQL カバリングインデックス #MySQL - Qiita

 

余談これ便利

DB Fiddle - SQL Database Playground

[DB]<DB Fiddle>SQLをWEBブラウザで簡単に学習(SELECT/INSERT/UPDATE/DELETE)