복붙노트

[SQL] 이 SQL 문에 대한 실행 순서는 무엇인가

SQL

이 SQL 문에 대한 실행 순서는 무엇인가

나는 SQL 쿼리 아래에 있습니다

SELECT TOP 5 C.CustomerID,C.CustomerName,C.CustomerSalary
FROM Customer C
WHERE C.CustomerSalary > 10000
ORDER BY C.CustomerSalary DESC

무엇이 적절한 설명과 함께 다음의 실행 순서가 될 것입니다

해결법

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

    1.특히이 섹션에서 SELECT 문에 대한 문서를 체크 아웃 :

    특히이 섹션에서 SELECT 문에 대한 문서를 체크 아웃 :

    이는 다음과 같은 순서를 제공합니다 :

    FROM
    ON
    JOIN
    WHERE
    GROUP BY
    WITH CUBE or WITH ROLLUP
    HAVING
    SELECT
    DISTINCT
    ORDER BY
    TOP
    
  2. ==============================

    2.여기에 대한 좋은 기사입니다 : http://blog.sqlauthority.com/2009/04/06/sql-server-logical-query-processing-phases-order-of-statement-execution/

    여기에 대한 좋은 기사입니다 : http://blog.sqlauthority.com/2009/04/06/sql-server-logical-query-processing-phases-order-of-statement-execution/

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

    3.이것은 귀하의 경우에, 정확한 실행 순서입니다.

    이것은 귀하의 경우에, 정확한 실행 순서입니다.

    1-FROM
    2-WHERE
    3-SELECT 
    4-ORDER BY
    5-TOP
    
  4. ==============================

    4.간단하게이 문구를 기억 : -     프레드 존스 '이상한 무덤은 여러 둔한 올빼미를 가지고

    간단하게이 문구를 기억 : -     프레드 존스 '이상한 무덤은 여러 둔한 올빼미를 가지고

    각 단어의 첫 글자를 가지고, 당신이 얻을 : -

    FROM
    (ON)
    JOIN
    WHERE
    GROUP BY
    (WITH CUBE or WITH ROLLUP)
    HAVING
    SELECT
    DISTINCT
    ORDER BY
    TOP
    

    희망이 도움이.

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

    5.그들은 단순히 원하는 결과를 설명하고 데이터베이스 쿼리 최적화 프로그램 (희망) 실제 실행에 가장 적합한 계획을 결정 - WHERE TOP, 및 ORDER BY는 "실행"되지 않습니다. "원하는 결과를 선언"어떻게 물리적으로 달성 사이의 분리는 SQL에 "선언"언어를 만드는 것입니다.

    그들은 단순히 원하는 결과를 설명하고 데이터베이스 쿼리 최적화 프로그램 (희망) 실제 실행에 가장 적합한 계획을 결정 - WHERE TOP, 및 ORDER BY는 "실행"되지 않습니다. "원하는 결과를 선언"어떻게 물리적으로 달성 사이의 분리는 SQL에 "선언"언어를 만드는 것입니다.

    이 CustomerSalary에 대한 인덱스이며, 테이블이 (맨 아래에보기 실행 계획 클릭) 인덱스 + 테이블 힙 액세스를 추구이 SQL 바이올린에 도시 된 바와 같이, 쿼리가 가능성이 실행됩니다 클러스터되지 않은 가정 :

    당신이 볼 수 있듯이 인덱스 탐색을 통해 먼저 올바른 CustomerSalary 값은 값이 RID 조회 (행 ID 조회)를 통해 테이블 ​​힙에서 검색 속한 다음 행을 찾을 수 있습니다. 그 문제에 대한 중첩 루프를 그대로 탑, 여기에 단지 쇼를 위해 (그리고 0 %의 비용이) - 시작 인덱스가 어떤 경우에 하나의 행 (대부분에서) 돌아갑니다 추구합니다. 전체 쿼리는 오히려 효율적이며 가능성이 몇 I / O 작업을 요할 것이다.

    테이블이 클러스터 된 경우, 당신은 가능성합니다 (DDL SQL 클러스터되지 않은 키워드의 부족주의)이 SQL 바이올린에 도시 된 바와 같이 다른 인덱스 대신 테이블 힙 접근의 모색해야합니다 :

    하지만 조심 : 나는 "오른쪽"실행 계획을 얻을 수있는이 시간 운이 좋았다. 쿼리 최적화 프로그램은 작은 테이블에 실제로 빠른 때때로 전체 테이블 스캔을 선택했을 수 있습니다. 쿼리 계획을 분석 할 때, 항상 데이터의 실제 양에 그렇게하려고!

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

    6.내 $ 0.02 여기.

    내 $ 0.02 여기.

    논리적 실행 순서 및 쿼리 실행 계획 : 여기에 행동이 개 다른 개념이있다. 타자는 다음과 같은 질문에 답을 누가 볼 수 있었다 :

    첫 번째 질문은 논리적 실행 순서에 의해 응답된다. 브라이언의 대답은 그것이 무엇인지 보여줍니다. 그것은 SQL이 당신의 명령을 이해 방법 : "고객 (C 별칭으로) 테이블 고려 하위 순서 C.CustomerSalary BY 연 C.CustomerSalary> 10000 ORDER 그들과 SELECT 열이 TOP 5 행을 나열 행만로부터". 결과 집합은 그 의미를 순종

    내부 작업에 최적화 SQL 서버의 크게 의존하고 있기 때문에 (테이블 정의, 데이터의 선택, 고객 테이블에있는 행의 수량, 정의 인덱스 등) 그리고 스키마에 따라 달라집니다 - 두 번째 질문의 대답은 쿼리 실행 계획이다.

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

    7.더 나은 설명 https://msdn.microsoft.com/en-us/library/ms189499.aspx를 방문하십시오.

    더 나은 설명 https://msdn.microsoft.com/en-us/library/ms189499.aspx를 방문하십시오.

    다음 단계는 논리 처리 순서를 표시하거나 SELECT 문 바인딩 순서. 한 단계에서 정의 된 객체가 후속 단계의 절에 제공 할 때의 순서를 결정한다. 쿼리 프로세서가 FROM 절에 정의 (액세스) 테이블이나 뷰에 바인딩 할 수 있습니다 예를 들어, 이러한 개체 및 열 이후의 모든 단계를 사용할 수 있습니다. SELECT 절 8 단계이기 때문에, 반대로 그 절에 정의 된 컬럼 alias 또는 유도 열 조항 항에서 참조 될 수 없다. 그러나, 그들은 같은 ORDER BY 절로서 다음 절을 참조 할 수 있습니다. 명령문의 실행이 실제 물리적 쿼리 프로세서에 의해 결정되는 상기 순서리스트에서 달라질 수 있습니다.

    에서

    의 위에

    붙다

    어디

    GROUP BY

    WITH CUBE 또는 WITH ROLLUP

    HAVING

    고르다

    뚜렷한

    주문

    상단

  8. from https://stackoverflow.com/questions/17403935/what-is-the-order-of-execution-for-this-sql-statement by cc-by-sa and MIT license