복붙노트

[SQL] 어떤 순서로 쿼리 및 하위 쿼리는 SQL 엔진에 의해 실행됩니다?

SQL

어떤 순서로 쿼리 및 하위 쿼리는 SQL 엔진에 의해 실행됩니다?

안녕하세요 하나의 질문에 대한 호기심은 SQL 테스트 및 의심을 / 제작 :

어떤 순서로 쿼리 및 하위 쿼리는 SQL 엔진에 의해 실행됩니다?

답변이었다

나는 마지막 대답 (그냥 가장 신뢰할 수 w.r.t. 다른 사람이라고 가정하면)을 choosed 할. 호기심을 지금 :

어디에서 이것에 대해 읽고 잠시 그 ​​모든 아래의 메커니즘은 무엇을 할 수 있습니까?

감사합니다.

해결법

  1. ==============================

    1.옵션 4는 가까운 거리에 있습니다.

    옵션 4는 가까운 거리에 있습니다.

    SQL은 선언적이다 : 당신은 당신이 원하는 그것이 가장 좋은 (시간에 따라 / "비용"등)을 수행하는 방법을 작동하는 무슨 쿼리 최적화를 말한다. 이 겉으로는 동일한 쿼리 및 통계에 따라 테이블, 데이터 배포, 행 수, 병렬 하나님 다른 알고에 따라 다를 수 있습니다.

    이것은 정해진 순서가있는 것을 의미한다. 그러나 "즉석에서"매우 아니다

    심지어 동일한 서버, 스키마, 쿼리 및 데이터 나 실행 계획이 다른 봤어요

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

    2.나는 대답 4 올바른 생각합니다. 몇 가지 고려 사항이 있습니다 :

    나는 대답 4 올바른 생각합니다. 몇 가지 고려 사항이 있습니다 :

    하위 쿼리의 종류 - 그것은 corrrelated, 또는하지 않습니다. 치다:

    SELECT *
    FROM   t1
    WHERE  id IN (
                 SELECT id
                 FROM   t2
                )
    

    여기서, 서브 쿼리는 외부 쿼리 상관 관계가 없습니다. t2.id있는 값의 개수는 t1.id에 비해 작은 경우, 먼저 주사 T1 또는 t1.id에 인덱스 매칭에 대해 다음 서브 쿼리를 실행하고, 메모리에 그 결과를 유지하고, 아마도 가장 효율적인 캐시 된 값.

    그러나 쿼리 인 경우 :

    SELECT *
    FROM   t1
    WHERE  id IN (
                 SELECT id
                 FROM   t2
                 WHERE  t2.type = t1.type
                )
    

    여기에 하위 쿼리 상관 관계 - t1.type을 알고하지 않으면 하위 쿼리를 계산하는 방법은 없습니다. t1.type 값이 외부 쿼리의 각 행에 대해 달라질 수 있으므로, 이러한 서브 쿼리는 외부 쿼리의 각 행에 대해 한 번 수행 될 수있다.

    그런 다음 다시, RDBMS는 t2.type에 대한 몇 가지 값이 있습니다 정말 똑똑하고 실현할 수 있습니다. 는 하위 쿼리를 실행하는 비용은 한 번 각 행에 대해 그 일을하는 것이 저렴 될 것이라고 추측 할 수 있다면이 경우, 여전히 비 상관 서브 쿼리에 사용되는 방법을 사용할 수 있습니다.

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

    3.는 SQL 엔진 (하위) 쿼리가 실행되는 순서를 최적화하려고합니다. 그것에 대해 결정하는 부분은 쿼리 최적화 프로그램이라고합니다. 쿼리 최적화 프로그램은 많은 행이 테이블 인덱스와 어떤 필드에이있는 각 테이블에있는 방법을 알고 있습니다. 먼저 실행하기 위해 어떤 부분을 결정하기 위해 해당 정보를 사용합니다.

    는 SQL 엔진 (하위) 쿼리가 실행되는 순서를 최적화하려고합니다. 그것에 대해 결정하는 부분은 쿼리 최적화 프로그램이라고합니다. 쿼리 최적화 프로그램은 많은 행이 테이블 인덱스와 어떤 필드에이있는 각 테이블에있는 방법을 알고 있습니다. 먼저 실행하기 위해 어떤 부분을 결정하기 위해 해당 정보를 사용합니다.

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

    4.T-SQL 쿼리 :이 주제에 읽을 뭔가를 원하는 경우, 내부 SQL 서버 2008의 사본을 얻을. 이 쿼리는 SQL Server의 논리적 및 물리적 처리 방법에 대한 두 개의 전용 장 있습니다.

    T-SQL 쿼리 :이 주제에 읽을 뭔가를 원하는 경우, 내부 SQL 서버 2008의 사본을 얻을. 이 쿼리는 SQL Server의 논리적 및 물리적 처리 방법에 대한 두 개의 전용 장 있습니다.

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

    5.내가 두 번째 대답이 더 그럴듯하다고 생각 ... 보통의 당신의 DBMS에서 따라 다르지만. 국무 쿼리는 일반적으로 서브 쿼리 결과없이 계산할 수 없습니다.

    내가 두 번째 대답이 더 그럴듯하다고 생각 ... 보통의 당신의 DBMS에서 따라 다르지만. 국무 쿼리는 일반적으로 서브 쿼리 결과없이 계산할 수 없습니다.

  6. from https://stackoverflow.com/questions/2263186/in-which-sequence-are-queries-and-sub-queries-executed-by-the-sql-engine by cc-by-sa and MIT license