갖는 문제의 원인, 행 만 반환합니다.하위 쿼리는 다음과 같이 하위 쿼리를 만드는 느린
SELECT ser_id FROM history WHERE his_status=2
그것은 단지 0.5 초에서 작동 : 난 단지 서브 쿼리를 실행하면
. 이 하위 쿼리에는 50,000 개의 레코드가 있습니다.
어떤 방법으로 이것을 최적화 할 수 있습니까? 고맙습니다.
갖는 문제의 원인, 행 만 반환합니다.하위 쿼리는 다음과 같이 하위 쿼리를 만드는 느린
SELECT ser_id FROM history WHERE his_status=2
그것은 단지 0.5 초에서 작동 : 난 단지 서브 쿼리를 실행하면
. 이 하위 쿼리에는 50,000 개의 레코드가 있습니다.
어떤 방법으로 이것을 최적화 할 수 있습니까? 고맙습니다.
대신 NOT EXISTS
을 사용해보세요.
SELECT s.ser_id
FROM service s
WHERE NOT EXISTS (
SELECT 1
FROM history h
WHERE h.his_status = 2
AND h.ser_id = s.ser_id
)
실제 차이를 볼 수 있지만 EXPLAIN
계획을 시도를 처리 할 때이 쿼리 속도를해야 행의 "큰"금액은 하위 쿼리 자체 내에서 들었다.
먼저 색인을 만들어야합니다.
CREATE INDEX ser_id__index ON service (ser_id);
CREATE INDEX his_status__index ON history (his_status);
그런 다음
ser_id``에
SELECT ser_id FROM service
WHERE ser_id NOT IN
(SELECT ser_id FROM history WHERE his_status=2);
둘째
SELECT ser_id FROM service
WHERE ser_id NOT IN
(SELECT DISTINCT ser_id FROM history WHERE his_status=2);
갖는 인덱스 첫째와'his_status' 도움이 될이 두 SQL을 비교합니다. 아마도 '존재하지 않음'또는 '외부 조인/널'이 더 빠를 것입니다. 일반적으로 성능 관련 질문이있을뿐입니다. – sgeddes