저는 미국에서의 태양 잠재력을 나타내는 비영리 단체와 협력하고 있습니다. 말할 필요도없이, 우리는 엄청나게 큰 PostgreSQL 9 데이터베이스를 가지고 있습니다. 아래 표시된 것과 같은 쿼리를 실행하면 order by
행의 주석 처리가 해제 될 때까지 속도가 빨라집니다.이 경우 동일한 쿼리가 영원히 실행됩니다 (25 분에 비해 정렬없이 185ms). 이 쿼리와 다른 쿼리를보다 관리하기 쉽고 합리적인 시간에 실행하려면 어떤 단계를 수행해야합니까?ORDER BY를 사용하면 DB 성능이 좋지 않음
select A.s_oid, A.s_id, A.area_acre, A.power_peak, A.nearby_city, A.solar_total
from global_site A cross join na_utility_line B
where (A.power_peak between 1.0 AND 100.0)
and A.area_acre >= 500
and A.solar_avg >= 5.0
AND A.pc_num <= 1000
and (A.fips_level1 = '06' AND A.fips_country = 'US' AND A.fips_level2 = '025')
and B.volt_mn_kv >= 69
and B.fips_code like '%US06%'
and B.status = 'active'
and ST_within(ST_Centroid(A.wkb_geometry), ST_Buffer((B.wkb_geometry), 1000))
--order by A.area_acre
offset 0 limit 11;
쿼리에서 얼마나 많은 행을 반환합니까? 각각의 경우에 EXPLAIN ANALYZE를 통해 쿼리를 실행할 때 출력은 무엇입니까? –
문제를 해결하는 첫 번째 단계는 * 두 버전의 쿼리에 대한 explain analyze 출력을 살펴 보는 것입니다. 당신이 그것을 읽을 수 없다면 (아주 친숙하지는 않습니다) http://explain.depesz.com/에 올려 놓고 두 계획에 대한 링크를주십시오. –
이 특정 쿼리의 결과는 11 행뿐입니다. '주문 기준'이없는 Explain Analyze의 출력은 WITH 정렬과 기본적으로 동일하며 행을 정렬하는 데 사용 된 117117ms를 뺀 값입니다. –