최근에 나는 Clojure에 익숙해지고 있으며 필요할 때만 값을 계산하는 lazy sequence evaluation에 대해 즐겁게 생각한다.LIMIT 최적화 된 쿼리
나는 PostgreSQL DB에서 많은 작업을하고 있으며, LIMIT 절을 사용할 때 쿼리의 성능이 서로 다릅니다. 예를 들어 쿼리에 대한
SELECT * FROM(
SELECT id FROM foo1
INTERSECT
SELECT id FROM foo2) AS subquery
LIMIT 50
이이 포스트 그레스는 먼저 전체 결과를 평가하고 단지 처음 50 개 행을 얻을 것을 제안
SELECT id FROM foo1
INTERSECT
SELECT id FROM foo2.
같은 같은 실행 시간이있을 것이다. 이것은 DB 프로세스 데이터가 최종 답을 얻을 필요가 없으므로 게으름의 개념과 반대입니다. 그러나 다른 한편으로 쿼리를
SELECT * FROM foo1 INNER JOIN foo2 ON foo1.id=foo2.id LIMIT 50
는
SELECT * FROM foo1 INNER JOIN foo2 ON foo1.id=foo2.id.
보다 훨씬 더 좋은 성능을 누군가가 포스트 그레스 작업은 LIMIT의 게으름을 지원하는 알고 있나요?
참고 :'LIMIT'를 ORDER'없이 BY' 거의 또는 전혀 의미가 없습니다. – wildplasser
쿼리 계획이나 성능에 관한 질문은 *** 항상 *** 버전의 Postgres와 케이스의 정확한 테이블 정의를 포함하십시오. ['[postgresql-performance]'에 대한 태그 정보를 읽으십시오 (http://stackoverflow.com/tags/postgresql-performance/info). 인덱스와 제약 조건은 특히 중요합니다. –
@wildplasser : 임의의 * 선택이 괜찮은 한, 'LIMIT'은 'ORDER BY'없이는 의미가 있습니다. 많은 신참자들이 세부 사항을 알지 못하기 때문에 여기에있는 질문과 같은 잘못된 검색어를 주로 보게됩니다. –