2009-10-18 8 views
0

여러 행을 검색하는 가장 좋은 방법은 무엇입니까?select - where-in-join을 사용하는 mysql 쿼리

select * 
    from order_details 
where order_id in (1,2,3, ... ....) 

... 또는 :

 select * 
     from order_details 
INNER JOIN orders on orders.id = order_details.order_id 
INNER JOIN customers on customers.id = orders.customer_id 
    where customers.id = 3 
+2

일반적으로 달라집니다. :) –

+1

좋지 않은 예제를 제공했습니다. 첫 번째 쿼리는'ORDER_ID'를 기반으로 한'ORDER_DETAIL' 레코드 목록을 가져옵니다. 두번째 질의는'CUSTOMER_ID'가 특정 값인'ORDER_DETAIL' 레코드를 찾고 있습니다. –

답변

3

첫 번째 버전은 한 테이블에서 선택하므로 수행 할 작업이 적습니다.

그러나 두 번째 쿼리가 올바른 대답을 생성하는 경우 다른 두 테이블의 작업을 수행하여 order_id 값 목록을 설정하여 첫 번째 문을 생성해야합니다.이 경우 집계 작업 부하는 더 커지고 전반적인 두 번째 성명을 사용하는 것이 더 낫습니다.

일반적으로 SQL 최적화 프로그램을 최적화합니다. 그것은 당신보다 최적화가 더 낫습니다. 문제의 조각 이라기보다는 전체적인 문제를 해결할 때 가장 잘 작동합니다.

합니다 (DBMS가 클라이언트에 중간 결과를 전송해야하고 분석하고 두 개의 문을 최적화하지 않는 경우에만 있기 때문에 경우 일반적으로 첫 번째의 전체 워크로드를-수행합니다 두 번째 옵션을 선택합니다.)

또한 두 번째 명령문은 결과 집합에 대해 훨씬 큰 행 크기를 갖습니다 ('*'는 1 대신 3 개의 테이블 열을 포함하므로). 이것은 실제로 두 개의 동등한 SQL 문을 공정하게 비교하지 않습니다.

+0

동의 .. 두 번째 쿼리에서 내가 order_details 선택을 제한해야합니다. * – Addy

0

나는 그들에게 모두 노력하고 벤치 마크를하고 추천 할 것입니다. 인덱싱, 열 크기 및 행 수에 따라 달라질 수 있기 때문입니다.

예를 들어 phpMyAdmin이 수행하는 각 쿼리에 대해 실행 시간이 표시되기 때문에 어렵지 않아야합니다.

관련 문제