[SQL] 자신의 SQL Server 2005의 책과 SQL 서버 2008 책에 Itzik 벤 웨이 코 뮤니시의 논리 질의 처리 순서에 대해 혼란
SQL자신의 SQL Server 2005의 책과 SQL 서버 2008 책에 Itzik 벤 웨이 코 뮤니시의 논리 질의 처리 순서에 대해 혼란
책 내부의 Microsoft SQL Server ™ 2005 T-SQL 쿼리에서, 저자 Itzik 벤 웨이 코 뮤니시는 우리에게 순서를 알 또는 SQL Server 2005의 논리적 인 질의 처리는 다음과 같습니다
(8) SELECT (9) DISTINCT (11) <TOP_specification> <select_list>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2) ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) WITH {CUBE | ROLLUP}
(7) HAVING <having_condition>
(10) ORDER BY <order_by_list>
1. FROM
2. ON
3. OUTER (join)
4. WHERE
5. GROUP BY
6. CUBE | ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10. ORDER BY <---------------------- NOTE
11. TOP <---------------------- NOTE
그의 책 내부 마이크로 소프트 SQL 서버 2008 : T-SQL 쿼리, 그는 우리에게 다음과 같은 논리적 인 질의 처리 순서를 알 :
(1) FROM
(1-J1) Cartesian Product
(1-J2) ON Filter
(1-J3) Add Outer Rows
(2) WHERE
(3) GROUP BY
(4) HAVING
(5) SELECT
(5-1) Evaluate Expressions
(5-2) DISTINCT
(5-3) TOP <---------------------- NOTE
(6) ORDER BY <---------------------- NOTE
이 책에서 위 발췌에서 TOP 및 ORDER BY의 순서를합니다. 그들은 바로 맞은 편입니다. 나는이 두 단계는 매우 중요하다고 생각하고, 다른 순서와 완전히 다른 결과를 줄 것이다. 나는 SQL 서버 2008은 SQL Server 2005 또는이 원인이 뭔가 다른 이유에서의 스토리지 엔진에 뭔가를 변경 여부를 알고 싶어?
감사.
해결법
-
==============================
1.논리적 처리 순서는이 온라인 항목에 설명되어 있습니다. 실제 처리 순서에서 논리적 처리 순서를 구별 할주의하십시오. BOL 항목 노트로 :
논리적 처리 순서는이 온라인 항목에 설명되어 있습니다. 실제 처리 순서에서 논리적 처리 순서를 구별 할주의하십시오. BOL 항목 노트로 :
쿼리 최적화 프로그램은 올바른 결과를 물리적 실행 계획으로 쿼리에 의해 지정된 논리적 인 요구 사항을 번역 무료입니다. 일반적으로, 주어진 로직 쿼리 많은 물리적 대안 물리적 계획 (결합 상업적) 논리 처리 순서 근본적으로 다르다 상술하기 때문에 매우 일반적이다있다.
-
==============================
2.이 체크 아웃 - 그것은이 문제에 노출 - 그리고 Itzik의 책이 언급된다. 2 차 위에 올.
이 체크 아웃 - 그것은이 문제에 노출 - 그리고 Itzik의 책이 언급된다. 2 차 위에 올.
-
==============================
3.T-SQL 쿼리의 자신의 2015 릴리스에서는 Itzik 벤 웨이 코 뮤니시는이 같은 "1-1 논리 쿼리 처리 단계 번호를 목록"에서 처리 논리적 쿼리를 업데이트 :
T-SQL 쿼리의 자신의 2015 릴리스에서는 Itzik 벤 웨이 코 뮤니시는이 같은 "1-1 논리 쿼리 처리 단계 번호를 목록"에서 처리 논리적 쿼리를 업데이트 :
(5) SELECT (5-2) DISTINCT (7) TOP(<top_specification>) (5-1) <select_list> (1) FROM (1-J) <left_table> <join_type> JOIN <right_table> ON <on_predicate> | (1-A) <left_table> <apply_type> APPLY <right_input_table> AS <alias> | (1-P) <left_table> PIVOT(<pivot_specification>) AS <alias> | (1-U) <left_table> UNPIVOT(<unpivot_specification>) AS <alias> (2) WHERE <where_predicate> (3) GROUP BY <group_by_specification> (4) HAVING <having_predicate> (6) ORDER BY <order_by_list> (7) OFFSET <offset_specification> ROWS FETCH NEXT <fetch_specification> ROWS ONLY;
이 책의 이전 2008 버전과는 달리, ORDER BY (6 단계)는 이제 TOP (7 단계) 이전에 발생합니다. 다른 곳에서 언급 한 바와 같이 물론, 두 사람은 관련이 있습니다. Itzik는 T-SQL 쿼리의 6 페이지의 설명에 :
이 SQL에서 달리 직관적 단점을 설명하기 때문에 위의 논리적 인 질의 처리 단계를 이해하는 것이 중요합니다.
표현 엔진이 SELECT 절 전에 WHEREclause을 평가하기 때문에 예를 들어, WHERE 절 (2 단계)에서 SELECT 절 (단계 5-2)에서 별칭을 사용할 수 없습니다.
-- This won't work! SELECT Cost = Quantity * Price FROM Orders WHERE Cost > 500.00;
로 Itzik "는 그의 책에서의 단계를 말한다 쿼리의 논리적 인 처리는 특정 순서가 있습니다. 대조적으로, 최적화는 종종 바로 가기를 만들 수 있습니다 실제 실행 계획이 생성하는. 물론, 그것은 단지 결과 집합 경우 바로 가기를 만들 것 올바른로 보장됩니다. "
from https://stackoverflow.com/questions/3270338/confused-about-itzik-ben-gans-logical-query-processing-order-in-his-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 다른 테이블을 기반으로 업데이트 테이블 (0) | 2020.07.06 |
---|---|
[SQL] SQL 테이블에 Active Directory 데이터 (0) | 2020.07.06 |
[SQL] 안드로이드 cursor.moveToNext ()? (0) | 2020.07.06 |
[SQL] 안드로이드 - 어떻게 내 응용 프로그램에서 만든 SQL 데이터베이스를 볼 수 있나요? 나는 이클립스에서 안드로이드 에뮬레이터를 실행 해요 (0) | 2020.07.06 |
[SQL] 정확한 배수 관계가 존재 SQL 만 선택 행 (0) | 2020.07.06 |