私のサーバのクエリがインデックスを使って適切にチェックされているかどうかを確認したかったのです。そこで私はlog_queries_not_using_indexes
を有効にし、テストケースを実行しました。MySQLのlog_queries_not_using_indexesの動作の理解
次のクエリがmysql.slow_log
テーブルに書き込まれていることがわかりました。
SELECT * FROM user_rel
WHERE (f = '5837be9dc34f747dbd7ba6c7' AND t = '5837be9dc34f747dbd7ba6ca')
OR (f = '5837be9dc34f747dbd7ba6ca' AND t = '5837be9dc34f747dbd7ba6c7')
LIMIT 2;
しかし、私のEXPLAIN EXTENDED
の結果はOKです。
# id, select_type, table, type, possible_keys, key, key_len, ref, rows, filtered, Extra
'1', 'SIMPLE', 'user_rel', 'range', 'f-t-UNIQUE,t_uid_idx', 'f-t-UNIQUE', '208', NULL, '2', '100.00', 'Using index condition'
なぜこのクエリがslow_log
と書かれているのですか?
編集1
ここではスロークエリログに関するmysqlのオプションがあります。
log_output TABLE
log_queries_not_using_indexes ON
long_query_time 2.000000
min_examined_row_limit 0
slow_query_log ON
sql_log_off OFF
編集2
私は10
にmin_examined_row_limit
を更新した後、クエリはもう表示されません。しかし、これはなぜlog_queries_not_using_indexes
の結果に影響しますか?
したがって、一意の 'f'、' t'ペアの行を1つだけ保持することをお勧めします。私はリファクタリングを試みます。ありがとうございました。 – redism