2016-11-25 12 views
0

私のサーバのクエリがインデックスを使って適切にチェックされているかどうかを確認したかったのです。そこで私は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

私は10min_examined_row_limitを更新した後、クエリはもう表示されません。しかし、これはなぜlog_queries_not_using_indexesの結果に影響しますか?

答えて

0

うん...他の理由のように臭い... log_queries_not_using_indexes

もしftは対称的である:あなたがそれらを格納する前に2つの列を「ソート」場合

の表は、より効率的に照会されます。 ORを実行する必要はなく、明白なインデックスをより効率的に使用できます。

+0

したがって、一意の 'f'、' t'ペアの行を1つだけ保持することをお勧めします。私はリファクタリングを試みます。ありがとうございました。 – redism

関連する問題