我想检查我的服务器的查询是否正确使用索引。所以我启用了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
结果?
答案 0 :(得分:0)
嗯...闻起来像是另一个避免log_queries_not_using_indexes
的理由。
如果f
和t
是对称的:
如果在存储之前对两列进行“排序”,则可以更有效地查询该表。您不需要执行OR
,它可以更有效地使用明显的索引。