TechNote

事務屋のおぼえがき

MySQLでインデックスを作成する方法

これまで結構DB使ってデータ検索とかいろいろしてきたけど、「パフォーマンスチューニング」とかいう言葉を見ても「?」という感じのまま使ってきた。なのでテーブル生成するときのcreate文を作るときも「not Null」や「Primary Key」くらいしか使用したことなかった。

でも頭の片隅ではずっと「あの一覧画面の表示の遅さはもしかしてパフォーマンスチューニングとやらで解決できるのでは」という考えが点滅していた。

そして今回、どうしても表示の遅さを改善したい場面に立ち会ったため、その辺りのことを調べてみた。

パフォーマンスチューニングとはなにか?

要は検索の効率化ということみたいだけど、検索を効率化するには、本に索引を作るように「インデックス」を付けるとよいらしい。

インデックスの付け方は

ALTER TABLE t_test ADD INDEX (id)

のようにする。

select文が投げられたとき、インデックスがない場合、DBはテーブル内の全行を調べることになるため効率が悪いらしい。

なのでインデックスを張ると検索などの性能は向上する。

ただしその一方で、データ更新のたびにインデックスを張り直すことになるので更新処理で少し速度低下を招く。またインデックスを付けるための使用容量を食う。
というデメリットもあるらしい。

実際インデックスを作成してみると、ちょっと表示に時間がかかっていた一覧画面がパッと表示されるようになって、一瞬目を疑ってしまった。これはもう少し詳しく勉強したほうがよさそうな感じ。

EXPLAINを使用すると、インデックスが適切に使用されているか確認できるらしい。そこはまた次回調べてみる。
http://dev.mysql.com/doc/refman/4.1/ja/explain.html

あわせて読みたい

非デザイナーに必須の組み合わせ Bootstrap + Font Awesome を使ってみた - TechNote非デザイナーに必須の組み合わせ Bootstrap + Font Awesome を使ってみた - TechNote

エンジニアにとって、webサービスや社内webシステムを作るときに毎回苦労するのが「デザイン」ですが、最近はBootstrapやBootMetro、Pureなど...

LOAD DATA INFILE使用時の文字化け - TechNoteLOAD DATA INFILE使用時の文字化け - TechNote

環境が変わったので移行時にこの方法で環境作成&データインポートをしたところ文字化けに遭遇。「LOAD DATA」の直前にSET NAMES UTF8;などと記述...

phpmyadminでLOAD DATA INFILE(カラム指定)の例 - TechNotephpmyadminでLOAD DATA INFILE(カラム指定)の例 - TechNote

mysqlモニタからのLOAD DATAのコマンドは下記。mysql> load data infile "c:\sample\KEN_ALL.csv" int...

MySQL CSVローダーの作成方法 - TechNoteMySQL CSVローダーの作成方法 - TechNote

システム構築時に、開発環境DBデータ(CREATE TABLEやCSVデータ)を本番環境に移す時、手動で実行するのではなく全て自動化すべきである。ローダを使って...


基礎からのMySQL 改訂版 (プログラマの種シリーズ SE必修! )

基礎からのMySQL 改訂版 (プログラマの種シリーズ SE必修! )

実践ハイパフォーマンスMySQL 第2版

実践ハイパフォーマンスMySQL 第2版