2014-02-20 3 views
0

나는 MySQL은 4 개 테이블로 구성된 가입이 :차이 체인 가입 및 하위 쿼리 좌 가입 SELECT

직접 체인

SELECT col1, col2, col3... col12 FROM 
    (((tbl1 LEFT JOIN tbl2...) LEFT JOIN tbl3 ...) LEFT JOIN tbl4); 

하위 SELECT

(SELECT col10 .. col12 FROM 
    (SELECT col7 .. col9 FROM 
    (SELECT col1, ... col6 FROM tbl1 
      LEFT JOIN tbl2) AS J1 
      LEFT JOIN tbl3) AS J2 
       LEFT JOIN tbl4...) 

인가를 두 가지 방법 사이에 효율성 차이가 있습니까? 나의 선택은 sub-select가 SELECT ... WHERE 절을 사용하여 불필요한 행과 열을 버리고 JOIN을 더 빠르고 메모리 집약적으로 만듭니다. 어떤 충고? 다른 데이터베이스는 어떻습니까?

답변

0

테이블 크기 및 필터링 된 데이터는 쿼리에 따라 다릅니다.

조건 1 : 테이블 크기가 정상적인 경우 (모든 테이블에 약 5000 개의 행이 있다고 가정) 필터링을 사용하지 않고 테이블에서 데이터를 가져 오는 경우 첫 번째 쿼리가 더 나은 성능을 제공 할 수있을지라도 두 쿼리에 차이가 없어야합니다 .

조건 2 : 테이블에 부피가 큰 데이터가있는 경우 행을 수십억 개로 가정하고 있지만 데이터를 필터링 한 후 실제 데이터 세트는 약 약에 가깝습니다. 100 행 미만이면 두 번째 쿼리가 더 좋을 수 있습니다.

엄격한 규정이 없으므로 테이블 데이터 크기 및 요구 사항에 따라 다양한 방식으로 쿼리 성능을 검사해야합니다. 엄지 법칙은 다른 테이블과의 조인의 데이터 크기를 줄일 수 있으면 성능이 향상된다는 것입니다.

0

일반적으로 테이블의 크기에 따라 달라 지므로 첫 번째 쿼리는 두 번째 쿼리보다 빠르며 두 번째 쿼리는 두 번째 쿼리보다 빠릅니다.