2013-05-02 2 views
0

안녕하세요, 나는 왜 하위 쿼리가 종속 쿼리로 변환되는지 이해하지 못했습니다.하위 쿼리를 종속 하위 쿼리로 변환

기본 쿼리에서 하위 쿼리가 종속 쿼리 테이블을 사용하지 않더라도 종속되지는 않습니다.

나는이 쿼리가 조인을 사용하여 최적화 할 수 있다는 것을 알고 있지만, 여기에 난 그냥 내가 ANY 키워드는 하위 쿼리 외부에서 값을 전달하기 위해 MySQL이 필요합니다 의심이

MYSQL Version 5.5 

EXPLAIN SELECT id FROM `cab_request_histories` 
WHERE cab_request_histories.id = any(SELECT id 
            FROM cab_requests 
            WHERE cab_requests.request_type = 'pickup') 

id select_type  table type   possible_keys  key    key_len ref rows Extra 
1 PRIMARY cab_request_histories index    NULL    PRIMARY 4 NULL 20      

2 DEPENDENT  SUBQUERY   cab_requests unique_subquery PRIMARY PRIMARY 4 func 1 

답변

1

의 이유를 알고 싶어 결과가 사실인지 평가하기 위해 내부에 당신은 SHOW WARNINGS 다음 EXPLAIN EXTENDED your_query를 사용하여 쿼리 무엇을 최적화 볼 수

SELECT id FROM cab_request_histories 
WHERE EXISTS 
    (SELECT 'this one is dependent' FROM cab_requests 
    WHERE cab_requests.request_type = 'pickup' 
    AND cab_requests.id = cab_request_histories.id) 

:

+0

기본 쿼리의 모든 행에 대해 하위 쿼리가 실행되고 있습니까? – praveen

+0

아마도 그렇게 생각합니다. 각 id가 history 테이블의 id와 같은지 확인해야합니다 (ANY를 사용할 때는 필요하지 않지만> ANY를 처리 할 수 ​​있으며 IN 절 또는 JOIN이 될 때 = ANY에 대해 최적화되지 않을 수도 있습니다). 더 자연스러운 선택) – Kickstart