地方在住IT系ニート

bkds

MySQL複合インデックス順番のメモ

複合インデックス

複合インデックスを登録するときは、順番が重要になる。
2つの複合インデックスの場合、順番が逆になることで意味がなくなります。

 id |      datetime       | flag
----+---------------------+------
  1 | 2021-04-01 00:00:00 |    0
  2 | 2021-02-01 00:00:00 |    1
  3 | 2021-01-01 00:00:00 |    0
  4 | 2021-03-01 00:00:00 |    0
  5 | 2021-02-01 00:00:00 |    0
  6 | 2021-05-01 00:00:00 |    1
  7 | 2021-04-01 00:00:00 |    1
  8 | 2021-02-01 00:00:00 |    1
  9 | 2021-01-01 00:00:00 |    0
 10 | 2021-03-01 00:00:00 |    1

上記のようなテーブルで(datetime, flag)の順に複合インデックスを登録した場合、以下のようなイメージになると思います。
これでは、datetimeとflagを使った検索には有効でなさそうです。

 id |      datetime       | flag
----+---------------------+------
  3 | 2021-01-01 00:00:00 |    0
  9 | 2021-01-01 00:00:00 |    0
  5 | 2021-02-01 00:00:00 |    0
  2 | 2021-02-01 00:00:00 |    1
  8 | 2021-02-01 00:00:00 |    1
  4 | 2021-03-01 00:00:00 |    0
 10 | 2021-03-01 00:00:00 |    1
  1 | 2021-04-01 00:00:00 |    0
  7 | 2021-04-01 00:00:00 |    1
  6 | 2021-05-01 00:00:00 |    1

(flag, datetime)の順の場合は、以下のようなイメージになると思います。
これだと綺麗で検索に有効そうです。

 id |      datetime       | flag
----+---------------------+------
  3 | 2021-01-01 00:00:00 |    0
  9 | 2021-01-01 00:00:00 |    0
  5 | 2021-02-01 00:00:00 |    0
  4 | 2021-03-01 00:00:00 |    0
  1 | 2021-04-01 00:00:00 |    0
  2 | 2021-02-01 00:00:00 |    1
  8 | 2021-02-01 00:00:00 |    1
 10 | 2021-03-01 00:00:00 |    1
  7 | 2021-04-01 00:00:00 |    1
  6 | 2021-05-01 00:00:00 |    1

登録の際は順番が重要ですが、検索等を行うときのwhere句内の要素の順番は複合インデックスの登録順と一致していなくても大丈夫。

にほんブログ村 IT技術ブログ IT技術メモへPVアクセスランキング にほんブログ村