木は次のような特徴を持った木構造です。取り出すには次のように木を辿れば良いです。全て取り出すには次のように木を辿ることができます。葉ノード間が繋がっていることによって範囲検索を効率的に行うことができます。ような複合インデックスを考えてみます。イメージとしては次のような構造になります。割り当てるイメージです。順番で並んでいるので、木を辿ることで探すことはできません。条件が指定されることで木を辿ることができるようになります。条件で絞り込むために木を利用することはできません。条件を満たすかどうかはわからないですよね。インデックスレコード全てを走査しないといけません。条件が等価比較になる場合に限って、複合インデックスとしての意味を持つことになります。次のように言及されています。木の実装について知りたい方は次の記事と言及されている関連記事を読むとかなり理解が深まると思います。木の葉ノードにレコードの全データが格納されています。特定のカラムに張るインデックスはセカンダリインデックスと呼ばれ、セカンダリインデックスの葉ノードには主キーが必ず含まれています。木を辿ってレコードを取得することになります。セカンダリインデックスに必要な情報が全て格納されていれば、クラスタ化インデックスを辿る手順をスキップすることができるので高速です。このようにレコードを取得する際にセカンダリインデックスで完結する場合のことをカバリングインデックスと呼びます。場合は次のようにレコードを取得します。側で全てフィルタリングされている場合はスキップ「雑なMySQLパフォーマンスチューニング」はこの辺の内容をわかりやすく説明しているので、ピンとこなければ読むことをお勧めします。出る場合にどのような処理が行われているかイメージが付くと思います。これによって、クラスタ化インデックスから取得するレコードが減るのでその分高速になります。恩恵を受けてパフォーマンスが改善する場合もあります。インデックスを張る上でのポイントインデックスを張る上では次のような内容がポイントになると思います。恩恵を十分に受けられるか?ソートに使うか?*4不適切なインデックスの例これまでに説明した内容がわかっていると、以下に挙げる内容が不適切なインデックスだとわかるはずです。インデックスの最初のカラムに範囲指定をする複合インデックス選択性の悪いインデックス他のインデックスで代替できるインデックス具体例を挙げるために、次のようなテーブルを扱うことにします。商品情報を管理するテーブルで、現在以降に掲載される商品の情報が日々追加されていく想定です。ENGINE=InnoDBそれでは具体例を見ていきます。インデックスの最初のカラムに範囲指定をする複合インデックス次のインデックスが定義されているとします。単一のインデックスを張るのとあまり変わりません。木をイメージするとわかりやすいです。ような条件でレコードを引こうと思った場合にインデックスレコードを走査する数が減りません。インデックスレコードを全て走査することになります。恩恵を受けられるかもしれません。値がどれだけ変わるかを見てみるのが良いでしょう。この値が少ないほどインデックスレコードの走査が少ないことを意味します。削除して単一のインデックスを張りましょう。(ends_at);似たような例として、次のようなインデックスを考えます。単一のインデックスを張るのとあまり変わりません。順番でインデックスを張ることで複合インデックスとしての恩恵が得られます。ends_at);選択性の悪いインデックス次のインデックスが定義されているとします。starts_at);これは、次のようなクエリに対処するために定義されたインデックスですが、選択性の観点で良くありません。いう条件は該当レコードが日々増えていきます。商品の増え方が一定であれば該当レコードの量は一定とみなせます。インデックスを張るべきです。ends_at);他のインデックスで代替できるインデックス次のインデックスが定義されているとします。役割を包含していることは一目瞭然です。インデックスについて簡単に解説しました。ついて完璧に理解しようと思うと膨大な知識が必要ですが、よくある単純な用途でインデックスを張るだけであれば、必要とされる知識はほんの少しであることがわかると思います。本エントリーによって、世の中から不適切なインデックスだらけのテーブルが少しでもなくなれば幸いです。使ったセキュリティログ検索基盤の構築こんにちは。A...2018-04-18ReactNativeプロジェクトのAndroid環境を整備する投稿開発部の吉田です。ビルドログの読込モバイル基盤グループのヴァンサン(@vincentisambart)です。使ったセキュリティログ検索基盤の構築サービス特性にあった検索システムの設計戦略クックパッド採用説明会「クックパッドはサービスの作り手を採用したいんです。/*}*/スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。