내 서버의 쿼리가 인덱스를 사용하고 있는지 확인하고 싶었습니다. 그래서 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
결과는 좋아 보인다.
# 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
으로 작성되었는지 설명해주십시오. 여기
편집 한
느린 쿼리 로그에 대한 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
편집 내가 10
에 min_examined_row_limit
를 업데이트 한 후 2
, 쿼리가 더 이상 표시되지 않습니다. 그러나 이것이 왜 log_queries_not_using_indexes
결과에 영향을 미칩니 까?
따라서 고유 한'f','t' 쌍에 대해 하나의 행만 유지하는 것이 좋습니다. 나는 당신이 제안한 것처럼 리팩터링하려고 노력할 것이다. 고맙습니다. – redism