アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在使用しているテーブルにインデックスが幾つか張られているのですが、すべて効率的に使われているかどうかが気になります。例えば全く使われていないインデックスがあったら無駄なので消したいと思っています。
インデックスの使用頻度や使用履歴を調べる方法があったら教えてもらえますでしょうか。MySQL4.0です。

A 回答 (1件)

SELECTを行った時などにどいのように処理が行われているかを見るには、EXPLAIN文を使います。


使用履歴などは残っていません。
使い方は、通常のSELECT文の前に"EXPLAIN"を記述するだけです。
例:EXPLAIN SELECT * FROM `TABLE` WHERE ~略~

本来は、テーブルの設計時に行って最適なものを設計するためであり、運用を始めてから「インデックスちゃんと使われているかなー」と調べるものではないです。
また、インデックスが使われるかどうかはSELECT文次第です。インデックスが使われるような書き方をしないと使ってくれない場合があります。

・MySQLがインデックスを使う条件
フィールド値を定数と比較するとき(WHERE name = "hoge")
フィールド値全体でJOINするとき(WHERE a.name = b.name)
フィールド値の範囲を求める時
LIKEで文字列の先頭が固定な時
MIN(),MAX()
文字列のプレフィックスをもとにしたORDER BY,GROUP BY
WHEREのすべてのフィールドがインデックスの一部の場合

・インデックスが使われない時
LIKEがワイルドカードで始まる時
DB全体を読んだ方がインデックスを使うより早いとMySQLが判断した時
通常はインデックスはORDER BYには使われない
WHEREとORDER BYのフィールドが違う時にはどちらかしか使われない

参考URL:http://slashdot.jp/journal.pl?op=display&uid=4&i …
    • good
    • 0
この回答へのお礼

お礼が遅くなりましたが、回答ありがとうございました。

既に遅いところがあって改善したい際に、explainは使っているのですが、逆に既存のindexについて、このindexってほんとに使われてるのかな?と疑問に思うところがありましたので、質問しました。

使用履歴などは残ってないとのことで、全処理のsqlを洗い出してexplainするしかなさそうですが、ちょっと現実的ではなさそうですね。

お礼日時:2006/10/18 11:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す