2017-12-28 43 views
1

나는 다음과 같은 쿼리가 있습니다.SQL 쿼리 실행 시간, SQL 서버, 중첩 된 쿼리

그러나 쿼리는 아무런 시간 내에 실행되지 않습니다. (작은 일에도 이상 초))

select count(*) as numberOfRows from (SELECT Brand,Id,Model FROM product) result

그 이유는 무엇입니까?

+0

아마도 쿼리 최적화 프로그램은 모든 레코드 자체가 아닌 레코드 수만 얻도록 쿼리를 최적화 할 수 있기를 기대하기 때문일 수 있습니다. 보통은 다음과 같이 처리한다 :'SELECT count (*) FROM product' –

+0

SQL 서버는 지능적으로 당신이 실제로 선택된 컬럼으로 아무 것도하지 않는 것을 알아 채기 때문에 단지'count (*)'를 실행한다. 실행 계획을 확인하십시오. – HoneyBadger

답변

0

쿼리를 실행하면 걸리는 시간은 열과 행의 수와 해당 데이터 유형에 따라 달라집니다.

10 개의 열이있는 테이블에서 모든 레코드에 대해 모든 열 (*)을 선택하고 모든 레코드에 대해 단 하나 또는 두 개의 열을 선택하면 성능이 달라집니다. 로드 된 데이터 양은 두 번째 경우가 적기 때문에 더 빠르게 실행됩니다.

마찬가지로 Count (*)라고 말하면 결과는 단일 셀이지만 첫 번째 Select에서는이 3 개의 열에 대해 수백만 개의 행을 선택하므로 데이터 양이 많습니다.

그래서 Count (*) 결과가 더 빨리 표시됩니다. 카운트 내에 *를 넣을 필요는 없습니다. 더 나은 성능을 위해 Count (1)를 사용하십시오.

+0

당신이 말한 것은 한계 성능 문제에 적용될 수 있지만 실제로이 질문과 관련이 없습니다. 그리고'count (*)'와'count (1)'는 같은 성능을 가지고 있습니다. –