LoginSignup
27
20

More than 5 years have passed since last update.

[MySQL] index使われてないクエリをいい感じに炙りだしたい

Last updated at Posted at 2017-07-10

以下の思惑をすべて満たしたい場合、どうしたらよいかと思い調べた。
(1) index使われてないクエリを炙りだしたい
(2) インデックス使ってないけど、テーブル行数少ないとか問題にならないようなものは出力させたくない
(3) 一時的でなくずっと設定しておいて、スロークエリログを監視しておきたい

日々の覚書: MySQLのスローログ関連のパラメーターが評価される順番
読んだ。

以下の設定でいけそう。
min_examined_row_limit は今回初めて知った。
log_throttle_queries_not_using_indexes はちょっと残念だった。

(※) 任意の値

# スロークエリ有効
slow_query_log=1 (※)

# スロークエリログ出力先指定
slow_query_log_file=slow_query.log (※)

# 1秒以上かかるクエリをスロークエリログに出力
long_query_time=1 (※)

# インデックス使ってないクエリをスロークエリログに出力
log_queries_not_using_indexes=1

# 検査行が1000行以下の場合、スロークエリログに出さない
min_examined_row_limit=1000 (※)

# 一度スロークエリログ出力したら、1分はスロークエリログに出さない
# ただし、not_using_indexだけでなく、long_query_timeオーバーの方も出なくなるらしいので使わない。5.7だとどうか。
# log_throttle_queries_not_using_indexes=1
27
20
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
20