以下の思惑をすべて満たしたい場合、どうしたらよいかと思い調べた。
(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