본문 바로가기
MySql

MySQL MYSQL "explain query"에 "key"NULL이 표시됩니다.

by 베이스 공부 2021. 1. 29.
반응형

mysql이 다음 쿼리를 설명하도록 만들었습니다.

SELECT carid,pic0,bio,url,site,applet 
FROM cronjob_reloaded 
WHERE 
carid LIKE '%bmw%' 
OR 
carid LIKE '%mer%' 
OR 
age BETWEEN '5' AND '10' 
OR 
category IN ('used') 
ORDER BY CASE 
    WHEN carid LIKE '%bmw%' OR carid LIKE '%mer%' THEN 1 
    WHEN age BETWEEN '5' AND '10' THEN 2 
    ELSE 3 
END 

그리고 다음은 설명 결과입니다.

EXPLAIN SELECT carid, pic0, bio, url, site, applet
FROM cronjob_reloaded
WHERE carid LIKE '%bmw%'
OR carid LIKE '%mer%'
OR carid IS NOT NULL
AND age
BETWEEN '5'
AND '10'

내가 이해하지 못하는 것 :

여기에 이미지 설명 입력

키가 NULL 인 이유는 무엇입니까?

이 쿼리를 더 빠르게 만들 수 있습니까? 0.0035 초가 걸립니다. 1000 행 테이블의 경우 느리거나 빠릅니까?

내 테이블에서 carid는 테이블의 기본 키입니다.

 

해결 방법

 

MySQL이 쿼리에 사용할 인덱스를 찾지 못했습니다.

쿼리 속도는 CPU에 따라 다르며 행이 매우 적은 경우에도 사용 가능한 RAM, 시스템로드 및 디스크 속도에 따라 다릅니다. BENCHMARK 를 사용하여 쿼리를 여러 번 실행하고 더 높은 정밀도로 시간을 측정 할 수 있습니다 (예 : 100,000 번 실행하고 총 시간을 100,000으로 나눕니다).

색인 생성 문제 : WHERE 절에는 carid , age , category (그리고 간접적으로 performerid ). 먼저 category (직접 일치를 요청하기 때문에), age , 마지막으로 carid 에 대해 색인을 생성해야합니다.

CREATE INDEX test_index ON cronjob_reloaded ( category, age, carid );

이는 MySQL이 단일 인덱스 작업에서 쿼리의 WHERE 단계에 필요한 대부분의 정보를 모아줍니다.

performerid 를 추가하면 여러 요인에 따라 속도가 빨라질 수도 있고 그렇지 않을 수도 있습니다. 나는없이 시작하고 나중에 그것을 테스트 할 것입니다.

업데이트 : 원래 검색어가 변경된 것 같으며 더 이상 performerid 가 표시되지 않습니다.

마지막으로 1000 개의 행은 일반적으로 시간이 거의 걸리지 않아 모든 것을로드하고 WHERE 가 자체적으로 정렬하도록하는 것이 더 빠르기 때문에 MySQL이 색인을 전혀 사용하지 않기로 결정할 수도 있습니다.

 

참조 페이지 https://stackoverflow.com/questions/12390373

 

 

반응형

댓글