2012-09-25 3 views
0

쿼리가 q1, q2, q3 ... qn 인 경우 각각 실행 시간으로 t1, t2, t3 ... tn을 실행합니다. 하나가 될 것이다, Mysql Union 시간 V.S. 하나씩 별개의 쿼리

비교 TU 및 T1 + T2 + T3 + ... + TN TU

또한

나는 모든 2 분기 UNION ALL Q3 .... UNION ALL QN 및 실행 시간이 다른 쿼리의 1 분기 UNION을 가지고있다 이론적으로 더 빠릅니까? 실험을하는 것이 최선의 방법이라는 것을 알고 있지만 이론에 대한 전문적인 목소리를들을 필요가 있습니다. 감사합니다

+1

시험 문제와 비슷합니다. –

+0

실용적인 필요가있다. 구현 전략을 고려해야합니다 –

+0

각 버전을 실행 해 보셨습니까? 또는 실행 계획을 비교할 것인가? – Taryn

답변

2

연산자는 행이 반환되기 전에 결과 집합을 제거 할 중복 된 튜플 (행)을 필요로합니다. 사실 SORT UNIQUE 작업입니다. 작은 결과 집합에 대해서는 상대적으로 저렴하지만 대규모 집합의 경우 서버 시간에 리소스가 많이 소모 될 수 있습니다 (예 : 오랜 시간이 걸림)

이론적으로 쿼리를 UNION 연산자가 아닌 UNION ALL 연산자와 결합하면 ( n-1) 왕복 쿼리를 데이터베이스에서 제거하고 대 쿼리를 별도로 실행하므로 가장 빠릅니다. 그러나 n의 큰 값의 경우 SQL 텍스트의 크기 (최대 패킷 크기)에 대한 실용적인 제한을 따르게됩니다.

연산자와 별도의 쿼리 사이에서 선택하면 큰 결과 집합에 대해 별도의 쿼리가 서버 측에서 리소스 집약이 줄어들 수 있습니다.

요약하면 각 쿼리의 과도한 작업과 SORT UNIQUE 작업의 과도한 작업 사이의 절충점입니다.

2

n 개의 하위 쿼리가있는 UNION ALL은 n 개의 선택 항목으로 실행될 수 있으므로 스마트 DBMS는 최대 n 개의 개별 선택과 동일한 작업을 수행 할 수 있어야합니다.

왕복 시간은 n 쿼리의 경우 n * rtt이고 UNION ALL의 경우 rtt입니다.

이론상 스마트 DBMS는 항상 n 개의 개별 쿼리보다 단일 UNION ALL에 응답해야합니다.
실제로 평소와 같이 테스트하지 않고 모든 배팅을 해제합니다.