주문 기준으로 카운트 선택(*)
다음의 두 쿼리는 같은 방식으로 실행됩니까?
SELECT COUNT(*) from person ORDER BY last_name;
그리고.
SELECT COUNT(*) from person;
어느 쪽이든 동일한 결과를 표시해야 하므로, 저는 그 결과가 궁금했습니다.ORDER BY
그냥 무시당합니다.
제가 질문하는 이유는 데이터베이스에서 한 번에 20개의 레코드를 얻을 수 있는 페이지가 표시된 테이블을 표시한 다음 총 레코드 수를 세는 두 번째 쿼리를 실행하고 있기 때문입니다.처음 쿼리에서 사용한 것과 동일한 기준을 사용해야 하는지 아니면 기준에서 모든 정렬을 제거해야 하는지 알고 싶습니다.
실행 계획에 따르면 두 쿼리는 다릅니다.예를 들어, 다음과 같은 쿼리가 있습니다.
select count(*) from USER
다음을 제공합니다.
INDEX (FAST FULL SCAN) 3.0 3 453812 3457 1 TPMDBO USER_PK FAST FULL SCAN INDEX (UNIQUE) ANALYZED
보시다시피 해당 테이블의 기본 키인 USER_PK를 누릅니다.
색인되지 않은 열로 정렬하는 경우:
select count(*) from USER ORDER BY FIRSTNAME --No Index on FIRSTNAME
알아보겠습니다.
TABLE ACCESS (FULL) 19.0 19 1124488 3457 24199 1 TPMDBO USER FULL TABLE ANALYZED 1
즉, 전체 테이블 검색을 수행했습니다(노드 비용이 훨씬 높음).
기본 키(이미 인덱스)로 정렬하면 Oracle은 인덱스를 사용하여 다음과 같이 정렬할 수 있습니다.
INDEX (FAST FULL SCAN) 3.0 3 453812 3457 13828 1 TPMDBO USER_PK FAST FULL SCAN INDEX (UNIQUE) ANALYZED
첫 번째 실행 계획과 매우 비슷해 보입니다.
그래서, 여러분의 질문에 대한 답은 절대 아닙니다. 그들은 같지 않습니다.그러나 Oracle이 이미 찾고 있는 인덱스를 기준으로 주문하면 동일한 쿼리 계획이 생성될 수 있습니다.
물론 그렇지 않습니다.성이 기본 키이고 사용자가 이미 명령을 받은 경우가 아니라면요.
Oracle 쿼리 옵티마이저는 실제로 첫 번째 버전에 대해 정렬을 수행하지만(설명 계획을 보고 확인했습니다), 두 쿼리 모두 하나의 행만 반환하므로 성능 차이가 매우 적을 것입니다.
편집:
마이크의 대답은 정확합니다.성능 차이가 상당할 수 있습니다.
언급URL : https://stackoverflow.com/questions/9070527/select-count-with-an-order-by
'IT' 카테고리의 다른 글
누가 jQuery File Upload 플러그인 구현 방법을 설명해 줄 수 있습니까? (0) | 2023.10.15 |
---|---|
IntelliJ에서 셀레늄 서버를 시작하려고 할 때 jar 파일이 잘못되었거나 손상되었습니다. (0) | 2023.10.15 |
dplyr 많은 데이터 유형 변경 (0) | 2023.10.15 |
다중 FROM - 의미 (0) | 2023.10.15 |
케이스 무감각 플라스크-SQLlchemy 쿼리 (0) | 2023.10.15 |