복붙노트

[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. ==============================

    1.이 이론은 (이론 내가 SQL 표준을 의미) 행을 반환하고 제한합니다 모든 행을 가져 후 결과 집합을 HAVING 전에 결과 집합을 WHERE를 제한하는 것을 말한다. 따라서 WHERE 빠릅니다. 이 점에서 SQL 표준 준수의 DBMS에, 단지 당신이 WHERE A의 조건을 두지 수있는 HAVING 사용 (일부의 RDBMS에서 계산 열처럼.)

    이 이론은 (이론 내가 SQL 표준을 의미) 행을 반환하고 제한합니다 모든 행을 가져 후 결과 집합을 HAVING 전에 결과 집합을 WHERE를 제한하는 것을 말한다. 따라서 WHERE 빠릅니다. 이 점에서 SQL 표준 준수의 DBMS에, 단지 당신이 WHERE A의 조건을 두지 수있는 HAVING 사용 (일부의 RDBMS에서 계산 열처럼.)

    당신은 단지 모두에 대해 실행 계획을보고 직접 확인하실 수 있습니다, 아무것도 (당신의 데이터를 사용자의 특정 환경에서 특정 쿼리에 대한 측정.) 이길 것

  2. ==============================

    2.그것은 엔진에 달려 있습니다. MySQL은 예를 들어, 최적화를위한 거의 공간이 의미 체인의 거의 마지막 HAVING 적용됩니다. 수동에서 :

    그것은 엔진에 달려 있습니다. MySQL은 예를 들어, 최적화를위한 거의 공간이 의미 체인의 거의 마지막 HAVING 적용됩니다. 수동에서 :

    나는이 문제는 대부분의 SQL 데이터베이스 엔진에 동일한 생각하지만, 나는 그것을 보장 할 수 없습니다.

  3. ==============================

    3.두 쿼리는 동일하고 DBMS 쿼리이 인식해야 최적화와 생산은 동일한 쿼리 계획을 생성합니다. 그것은하지 않을 수 있습니다,하지만 현대의 시스템 기대할 수 있도록 상황은 인식 할 매우 간단합니다 - 심지어베이스 - 그것을 다루는합니다.

    두 쿼리는 동일하고 DBMS 쿼리이 인식해야 최적화와 생산은 동일한 쿼리 계획을 생성합니다. 그것은하지 않을 수 있습니다,하지만 현대의 시스템 기대할 수 있도록 상황은 인식 할 매우 간단합니다 - 심지어베이스 - 그것을 다루는합니다.

    HAVING 절은 WHERE 상태로, 그룹 기능에 대한 조건을 적용하는 데 사용되어야한다, 그렇지 않으면 그들은 mvoed 할 수 있습니다. 예를 들어. 당신이 COUNT이있는 그룹 (DZIALU)> 10 쿼리를 제한하려는 경우는 그룹이 아닌 개별 행에 작용하기 때문에, 말하자면, 당신은 HAVING에 조건을 넣어해야합니다.

  4. ==============================

    4.나는 절은 빠른 것 곳을 기대하지만, 그들은 정확히 동일한에 최적화 줄 가능성이 있습니다.

    나는 절은 빠른 것 곳을 기대하지만, 그들은 정확히 동일한에 최적화 줄 가능성이 있습니다.

  5. ==============================

    5.그들은 최적화가 정말 컨트롤을 복용하고 무엇을해야 하는지를 컴퓨터를 이야기하지 않는 것 말하는. 내가 가진의 사용은 A와 대안 where 절 아니라는 것을 동의 할 것이다. 데는 합 같은 ()가 사용 된 위치하여 그룹에 적용되는 특별한 용도를 가지고 있으며 100 자체보다>) 합계를 (가진 그룹 만 표시하도록 결과 집합을 제한 할 수 있습니다. 그룹에 대한 작품을 갖는, 어디 행에서 작동합니다. 그들은 사과와 오렌지입니다. 그들은 매우 다른 두 동물은 그래서 정말, 그들은 비교해서는 안된다.

    그들은 최적화가 정말 컨트롤을 복용하고 무엇을해야 하는지를 컴퓨터를 이야기하지 않는 것 말하는. 내가 가진의 사용은 A와 대안 where 절 아니라는 것을 동의 할 것이다. 데는 합 같은 ()가 사용 된 위치하여 그룹에 적용되는 특별한 용도를 가지고 있으며 100 자체보다>) 합계를 (가진 그룹 만 표시하도록 결과 집합을 제한 할 수 있습니다. 그룹에 대한 작품을 갖는, 어디 행에서 작동합니다. 그들은 사과와 오렌지입니다. 그들은 매우 다른 두 동물은 그래서 정말, 그들은 비교해서는 안된다.

  6. ==============================

    6.모두 문은 SQL Server와 동일한 성능을 가진 것은 유사한 계획에 모두 같은 문을 구문 분석하는 스마트 충분하다 할 것이다.

    모두 문은 SQL Server와 동일한 성능을 가진 것은 유사한 계획에 모두 같은 문을 구문 분석하는 스마트 충분하다 할 것이다.

    당신이 당신의 쿼리에서 HAVING WHERE 또는 사용하는 경우 그래서, 그것은 중요하지 않습니다.

    그러나, 이상적으로는 구문 WHERE 절을 사용해야합니다.

  7. ==============================

    7."WHERE" "HAVING"보다 빠르다!

    "WHERE" "HAVING"보다 빠르다!

    쿼리의 더 복잡한 그룹이다 - 때문에 속도가 느려 "HAVING"비교 수행합니다 필터 "루프"결과 더 많은 양의도되는 추가 다룰 것 ""필터 "HAVING"

    "HAVING"또한 더 많은 메모리 (RAM)를 사용합니다

    차이가 미성년자이며 절대적으로 무시 될 수있다 - Altho은 작은 데이터로 작업 할 때

  8. from https://stackoverflow.com/questions/328636/which-sql-statement-is-faster-having-vs-where by cc-by-sa and MIT license