了解MySQL log_queries_not_using_indexes行为

时间:2016-11-25 04:50:57

标签: mysql performance mysql-slow-query-log

我想检查我的服务器的查询是否正确使用索引。所以我启用了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结果似乎没问题。

# 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

我将min_examined_row_limit更新为10后,查询不再显示。但为什么这会影响log_queries_not_using_indexes结果?

1 个答案:

答案 0 :(得分:0)

嗯...闻起来像是另一个避免log_queries_not_using_indexes的理由。

如果ft是对称的:

如果在存储之前对两列进行“排序”,则可以更有效地查询该表。您不需要执行OR,它可以更有效地使用明显的索引。