내가 이렇게 보이는 쿼리를 가지고 :가장 효과적인 방법
SELECT COUNT(DISTINCT A) as a_distinct,
COUNT(DISTINCT B) as b_distinct,
COUNT(DISTINCT A)/COUNT(DISTINCT B) as a_b_ratio
FROM
sometable_ab
우리는 집계 함수를 두 번 그들이 계산 된 경우에도 실행으로 이것은 매우 비효율적 보이는 볼 수 있듯이 . 나는 문제에 대한 하나의 해결책을 두 개의 쿼리로 나누는 것만 생각할 수 있습니다. 그게 유일한 해결책 일까? 아니면 할 수있는 더 효율적인 솔루션입니다. 나는 PostgreSQL을 주로 사용하는 Redshift DB를 사용하고 있지만, 효율적으로 수행 할 수있는 DB의 방식을 생각할 수 없기 때문에 심지어 MYSQL의 솔루션도 사용할 수 있습니다.
SELECT a_distinct, b_distinct, a_distinct/b_distinct as a_b_ratio
FROM (SELECT COUNT(DISTINCT A) as a_distinct,
COUNT(DISTINCT B) as b_distinct
FROM sometable_ab
) ab
대부분의 집계 함수의 경우,이 관련성이없는,하지만
count(distinct)
는 성능 돼지가 될 수 있습니다 당신이 성능에 미치는 영향에 대해 걱정하는 경우
* "... 집계 함수가 두 번 실행됩니다."* 어떻게 알았습니까? –
@ MikeSherrill'CatRecall 어떻게 실행되는지 어떻게 알 수 있습니까? 설명이 계획을 혼동하게 만듭니다. – Sohaib
[EXPLAIN (ANALYZE, TIMING OFF)] (http://www.postgresql.org/docs/current/interactive/sql-explain.html)을 사용하여 큰 테이블에서 모든 쿼리 변형을 실행하고 찾아내는 데 가장 좋은 실행 시간. 쿼리 계획, 실행 시간 만 필요하지 않습니다. –