ドゥアイネットのプログラマー、湯川が開発日記を綴ります。

CALENDAR
S M T W T F S
     12
3456789
10111213141516
17181920212223
24252627282930
<< November 2019 >>
ARCHIVES
CATEGORIES
<< MySQLでLock wait timeout exceededエラー | main | MySQLのFORCE INDEX >>
MySQLのインデックスのファイルサイズ

 MySQLでレコード数が約60万件あるテーブルがあるとします。
そのテーブルにたいしてSQLを発行すると、朝一は遅いのですが、2回目以降は速いです。

RESET QUERY CACHE; でクエリキャッシュをクリアしても実行時間は速いです。

なんでだろうかと思い、ふとレコードのファイルサイズはどのくらいだろうと思いました。
以下のSQLで調べることができました。

データのファイルサイズ      : 87M
インデックスのファイルサイズ:106M

インデックスのファイルサイズがデータより大きかったです。
MySQLがインデックスを読み込むI/O処理にオーバヘッドがかかっているのかとも思ったのですが、
ちょっと解決策が見えない状態です。

select table_name, engine, table_rows, avg_row_length, data_length, index_length
from information_schema.tables
where table_schema=database()
order by (data_length + index_length) desc;

+------------+----------------+-------------+--------------+
| table_rows | avg_row_length | data_length | index_length |
+------------+----------------+-------------+--------------+
|     615570 |            141 |    87006480 |    106492928 |
|      29471 |           1856 |    54698176 |      1368064 |
|      30237 |            748 |    22626304 |            0 |
| Mysql | 19:13 | comments(0) | - |
コメント
コメントする