2012-12-18 2 views
0

같은 구조의 로그 테이블이 있습니다. 각 테이블은 사이트 및 수십억 개의 항목과 관련됩니다. 이 분할의 이유는 99.99 %의 쿼리가 사이트와 관련되어 있기 때문에 빠르고 효율적인 쿼리를 수행하기 위해서입니다.동일한 구조로 다른 테이블에서 최소값과 최대 값 검색

하지만이 시점에서이 테이블의 열의 최소 및 최대 값을 검색하고 싶습니다.

SQL 요청을 작성할 수 없습니다. UNION을 사용해야합니까?

요청 개념을 찾고 있는데 최종 SQL 요청이 아닙니다.

답변

2

UNION을 사용할 수 있습니다. 예. 이런 식으로 뭔가는해야한다 : 당신은 당신이 내부 MAX를 찾으려는 열에 대한 인덱스가있는 경우 쿼리가 해당 컬럼에 인덱스의 끝을 추구해야으로

SELECT MAX(PartialMax) AS TotalMax 
    FROM 
    (SELECT MAX(YourColumn) AS PartialMax FROM FirstTable UNION ALL SELECT MAX(YourColumn) AS PartialMax FROM SecondTable) AS X; 

, 당신은 아주 좋은 성능을 가지고 있어야 최대 값을 매우 빠르게 찾는다. 이 열에 인덱스가 없으면 쿼리는 본질적으로 아무 것도 주문하지 않기 때문에 최대 값을 찾기 위해 전체 테이블을 스캔해야합니다.

"엄청난 쿼리"에 대한 우려를 해결하기 위해 몇 가지 세부 정보를 추가했습니다.

"거대한"이 무슨 뜻인지 잘 모르겠습니다. 당신을 위해 UNION을 수행하는 VIEW를 생성 할 수 있습니다; 그런 다음 뷰를 사용하고 쿼리가 아주 작은 것 :

SELECT MAX(YourColumn) FROM YourView; 

을하지만 당신의 쿼리의 텍스트의 크기에 맞게 최적화합니다. 왜 그걸 최적화하는 것이 중요하다고 생각하니? VIEW는 유지 보수에 도움이 될 수 있습니다. 파티션을 추가하거나 제거하는 경우보기를 적절히 수정하면됩니다. 그러나 긴 쿼리 텍스트는 실제로 문제가되어서는 안됩니다.

또는 "거대한"으로, 쿼리가 수행 할 I/O 양에 대해 걱정합니까? 각 테이블의 인덱스가 YourColumn에 있는지 확인하는 것 외에도 각 파티션의 최대 값을 매우 빨리 찾을 수있는 것은 아닙니다.

+0

+1 나는이 답변을 내 것보다 더 좋아합니다. –

+0

답변 해 주셔서 감사합니다. 나는 14 개의 테이블을 가지고 있는데, 엄청난 쿼리 (14 UNION)를 피할 수있는 다른 가능성이 있습니까? – sdespont

+0

나의 늦은 대답에 대해 유감스럽게 생각합니다. "엄청나게"나는 14 개의 테이블에서 노동 조합을 만드는 것이 길고 섹시하지 않은 요청이라고 말하고 싶습니다. 업데이트 해 주셔서 감사합니다. – sdespont

관련 문제