bigmac-jp blog

web開発関連のメモ

MySQL メモ7 Indexデメリット

Indexを登録することでselect時のパフォーマンスが向上する場合があるが、
必要以上のIndexにはデメリットもある。

Insert時

新規レコード登録時にIndexの挿入が発生するため遅くなる。

Update時

更新対象のカラムにIndexが張られている場合に、Indexの更新も発生するため遅くなる。
更新対象のIndexサイズによって速度は変わる。

Delete時

データの削除時はテーブルに張られているすべてのIndexが更新されるため遅くなる。

Indexサイズの確認

下記SQLで実行可能

SELECT
  table_name
  , engine
  , table_rows AS tbl_rows
  , avg_row_length AS rlen
  , floor((data_length + index_length) / 1024 / 1024) AS all_mb
  , floor((data_length) / 1024 / 1024) AS data_mb
  , floor((index_length) / 1024 / 1024) AS index_mb 
FROM
  information_schema.tables 
WHERE
  table_schema = database() 
ORDER BY
  (data_length + index_length) DESC; 

+----------------+--------+----------+------+--------+---------+----------+
| table_name     | engine | tbl_rows | rlen | all_mb | data_mb | index_mb |
+----------------+--------+----------+------+--------+---------+----------+
| user_test_1    | InnoDB | 16756286 |   85 |   1626 |    1358 |      267 |
+----------------+--------+----------+------+--------+---------+----------+
1 rows in set (0.01 sec)

index_mb がIndexサイズとなるので、267MBとなる。