[SQL] 어떤 SQL 문은 빠르다? (대 WHERE 음 ...)
SQL어떤 SQL 문은 빠르다? (대 WHERE 음 ...)
SELECT NR_DZIALU, COUNT (NR_DZIALU) AS LICZ_PRAC_DZIALU
FROM PRACOWNICY
GROUP BY NR_DZIALU
HAVING NR_DZIALU = 30
또는
SELECT NR_DZIALU, COUNT (NR_DZIALU) AS LICZ_PRAC_DZIALU
FROM PRACOWNICY
WHERE NR_DZIALU = 30
GROUP BY NR_DZIALU
해결법
-
==============================
1.이 이론은 (이론 내가 SQL 표준을 의미) 행을 반환하고 제한합니다 모든 행을 가져 후 결과 집합을 HAVING 전에 결과 집합을 WHERE를 제한하는 것을 말한다. 따라서 WHERE 빠릅니다. 이 점에서 SQL 표준 준수의 DBMS에, 단지 당신이 WHERE A의 조건을 두지 수있는 HAVING 사용 (일부의 RDBMS에서 계산 열처럼.)
이 이론은 (이론 내가 SQL 표준을 의미) 행을 반환하고 제한합니다 모든 행을 가져 후 결과 집합을 HAVING 전에 결과 집합을 WHERE를 제한하는 것을 말한다. 따라서 WHERE 빠릅니다. 이 점에서 SQL 표준 준수의 DBMS에, 단지 당신이 WHERE A의 조건을 두지 수있는 HAVING 사용 (일부의 RDBMS에서 계산 열처럼.)
당신은 단지 모두에 대해 실행 계획을보고 직접 확인하실 수 있습니다, 아무것도 (당신의 데이터를 사용자의 특정 환경에서 특정 쿼리에 대한 측정.) 이길 것
-
==============================
2.그것은 엔진에 달려 있습니다. MySQL은 예를 들어, 최적화를위한 거의 공간이 의미 체인의 거의 마지막 HAVING 적용됩니다. 수동에서 :
그것은 엔진에 달려 있습니다. MySQL은 예를 들어, 최적화를위한 거의 공간이 의미 체인의 거의 마지막 HAVING 적용됩니다. 수동에서 :
나는이 문제는 대부분의 SQL 데이터베이스 엔진에 동일한 생각하지만, 나는 그것을 보장 할 수 없습니다.
-
==============================
3.두 쿼리는 동일하고 DBMS 쿼리이 인식해야 최적화와 생산은 동일한 쿼리 계획을 생성합니다. 그것은하지 않을 수 있습니다,하지만 현대의 시스템 기대할 수 있도록 상황은 인식 할 매우 간단합니다 - 심지어베이스 - 그것을 다루는합니다.
두 쿼리는 동일하고 DBMS 쿼리이 인식해야 최적화와 생산은 동일한 쿼리 계획을 생성합니다. 그것은하지 않을 수 있습니다,하지만 현대의 시스템 기대할 수 있도록 상황은 인식 할 매우 간단합니다 - 심지어베이스 - 그것을 다루는합니다.
HAVING 절은 WHERE 상태로, 그룹 기능에 대한 조건을 적용하는 데 사용되어야한다, 그렇지 않으면 그들은 mvoed 할 수 있습니다. 예를 들어. 당신이 COUNT이있는 그룹 (DZIALU)> 10 쿼리를 제한하려는 경우는 그룹이 아닌 개별 행에 작용하기 때문에, 말하자면, 당신은 HAVING에 조건을 넣어해야합니다.
-
==============================
4.나는 절은 빠른 것 곳을 기대하지만, 그들은 정확히 동일한에 최적화 줄 가능성이 있습니다.
나는 절은 빠른 것 곳을 기대하지만, 그들은 정확히 동일한에 최적화 줄 가능성이 있습니다.
-
==============================
5.그들은 최적화가 정말 컨트롤을 복용하고 무엇을해야 하는지를 컴퓨터를 이야기하지 않는 것 말하는. 내가 가진의 사용은 A와 대안 where 절 아니라는 것을 동의 할 것이다. 데는 합 같은 ()가 사용 된 위치하여 그룹에 적용되는 특별한 용도를 가지고 있으며 100 자체보다>) 합계를 (가진 그룹 만 표시하도록 결과 집합을 제한 할 수 있습니다. 그룹에 대한 작품을 갖는, 어디 행에서 작동합니다. 그들은 사과와 오렌지입니다. 그들은 매우 다른 두 동물은 그래서 정말, 그들은 비교해서는 안된다.
그들은 최적화가 정말 컨트롤을 복용하고 무엇을해야 하는지를 컴퓨터를 이야기하지 않는 것 말하는. 내가 가진의 사용은 A와 대안 where 절 아니라는 것을 동의 할 것이다. 데는 합 같은 ()가 사용 된 위치하여 그룹에 적용되는 특별한 용도를 가지고 있으며 100 자체보다>) 합계를 (가진 그룹 만 표시하도록 결과 집합을 제한 할 수 있습니다. 그룹에 대한 작품을 갖는, 어디 행에서 작동합니다. 그들은 사과와 오렌지입니다. 그들은 매우 다른 두 동물은 그래서 정말, 그들은 비교해서는 안된다.
-
==============================
6.모두 문은 SQL Server와 동일한 성능을 가진 것은 유사한 계획에 모두 같은 문을 구문 분석하는 스마트 충분하다 할 것이다.
모두 문은 SQL Server와 동일한 성능을 가진 것은 유사한 계획에 모두 같은 문을 구문 분석하는 스마트 충분하다 할 것이다.
당신이 당신의 쿼리에서 HAVING WHERE 또는 사용하는 경우 그래서, 그것은 중요하지 않습니다.
그러나, 이상적으로는 구문 WHERE 절을 사용해야합니다.
-
==============================
7."WHERE" "HAVING"보다 빠르다!
"WHERE" "HAVING"보다 빠르다!
쿼리의 더 복잡한 그룹이다 - 때문에 속도가 느려 "HAVING"비교 수행합니다 필터 "루프"결과 더 많은 양의도되는 추가 다룰 것 ""필터 "HAVING"
"HAVING"또한 더 많은 메모리 (RAM)를 사용합니다
차이가 미성년자이며 절대적으로 무시 될 수있다 - Altho은 작은 데이터로 작업 할 때
from https://stackoverflow.com/questions/328636/which-sql-statement-is-faster-having-vs-where by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 우리는 다른 테이블의 기본 키가 아닌 외부 키를 가질 수있다? (0) | 2020.06.05 |
---|---|
[SQL] SQL 서버 내에서 와일드 카드를 사용하여 (0) | 2020.06.05 |
[SQL] 어떻게 테이블에서 최대 값을 가지는 오라클 시퀀스 시작을 만드는 방법? (0) | 2020.06.05 |
[SQL] 는 SQL Server의 알터 사용자 정의 유형 (0) | 2020.06.05 |
[SQL] 없는 그룹에 의해 SQL에서 열을 선택합니다 (0) | 2020.06.05 |