SQLServer 에서 SELECT 문장의 실행 순서

3395 단어 SELECT실행 순서
오늘 한 문장 을 쓸 때,검색 분석 기 에서 실행 하려 면 10s 를 사용 하고,다른 문법 으로 바 꾸 려 면 1s 보다 적은 시간 만 사용 해 야 한다.동료 들 은 Sql 문장의 실행 순서 때 문 이 라 고 말한다.전에 관련 책 을 조금 봤 는데 인상 이 있어 서 인터넷 에서 자 료 를 찾 아 공 부 를 했 습 니 다.논리 조회 처리 절차
 
(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:FROM 자구 의 앞 두 표 에 피리 칼 적 을 실행 하여 가상 표 VT1 을 생 성 합 니 다.2.ON:VT1 에 ON 필터 적용.오직 그것 만 이진짜 줄 을 위해 VT2 에 삽 입 됩 니 다.3.OUTER(JOIN):OUTER JOIN 이 지정 되 어 있 으 면,보존 표 에서 일치 하 는 줄 을 찾 을 수 없 으 면 VT2 에 외부 줄 로 추가 하여 VT3 를 생 성 합 니 다.만약 FROM 자구 에 두 개 이상 의 표 가 포함 되 어 있다 면,이전 연결 로 생 성 된 결과 표 와 다음 표 에 대해 서 는 모든 표를 처리 할 때 까지 1 단계 부터 3 단계 까지 반복 적 으로 실행 합 니 다.4.VT3 에 WHERE 필 터 를 적용 한다.오직TRUE 줄 이 VT4 에 삽 입 됩 니 다.5.GROUP BY:GROUP BY 자구 의 열 목록 에 따라 VT4 의 줄 을 나 누 어 VT5 를 생 성 합 니 다.6.CUBE|ROLLUP:초 그룹 을 VT5 에 삽입 하여 VT6 를 생 성 합 니 다.7.HAVING:VT6 에 HAVING 필터 적용.오직TRUE 인 그룹 만 VT7 에 삽 입 됩 니 다.8.SELECT:SELECT 목록 을 처리 하여 VT8 을 생 성 합 니 다.9.DISTINCT:중 복 된 줄 을 VT8 에서 제거 하여 VT9 를 생 성 합 니 다.10.ORDER BY:VT9 의 줄 을 ORDER BY 자구 의 열 목록 에 따라 정렬 하여 표(VC 10)를 생 성 합 니 다.11.TOP:VC 10 의 시작 부분 에서 지 정 된 수량 이나 비율의 줄 을 선택 하여 표 VT 11 을 생 성하 고 호출 자 에 게 되 돌려 줍 니 다.다음은 다른 네티즌 들 의 보충 입 니 다.마치 자신 이 SQL 문 구 를 쓸 때 각 키워드 의 집행 순 서 를 잘 모 르 기 때문에 조직 된 SQL 문 구 는 좋 은 논리 가 부족 한 것 같 습 니 다.느낌 에 따라'맞 춤 형'(죄송합니다.SQL 문구 도 자주'맞 춤 형'이 라면 반성 해 야 하지 않 겠 습 니까?하하).이렇게 하 는 것 은 확실히 자신 을 상쾌 하 게 하 는 것 이다.그러나 기 계 를 고생 시 켰 다.서버 는 우리 의 난잡 한 SQL 구문 에서 다음 실행 해 야 할 키 워드 를 찾 아야 한다.효율 적 이 잖 아.우리 의 감각 신경 은 초 이하 의 변화 에 정말 민감 하지 않 기 때문에 잠시 자신 이 쓴 SQL 순 서 는 중요 하지 않다 고 생각한다."어차피 변 하지 않 았 어!"하하.사실 서버 는 모든 SQL 분석 시간 에 대해 상세 하 게 기록 하고 있 습 니 다.습관 적 으로 작성 한 SQL 과 표준 순서에 따라 작성 한 SQL 분석 시간의 차이 가 얼마나 큰 지 보 실 수 있 습 니 다.따라서 평소에 작업 할 때 SQL 문 구 를 표준 순서에 따라 쓰 는 것 을 권장 합 니 다.하 나 는 전공 이 고,다른 하 나 는 실 용적 입 니 다.하하,그러나 가장 중요 한 것 은 마음 이 편안 하 다 는 것 입 니 다.표준 SQL 의 해석 순 서 는 다음 과 같 습 니 다.(1).FROM 자구,서로 다른 데이터 소스 에서 온 데이터(2).WHERE 자 구 를 조립 하고 지 정 된 조건 에 따라 기록 을 선별 합 니 다(3).GROUP BY 자구,데 이 터 를 여러 그룹 으로 나 눕 니 다(4).취 합 함 수 를 사용 하여 계산 합 니 다(5).HAVING 자 구 를 사용 하여 그룹 을 선별 합 니 다(6).모든 표현 식 을 계산 합 니 다(7).ORDER BY 를 사용 하여 결과 집합 을 정렬 합 니 다.예 를 들 어 학생 성적표 에(tb 로 잠 정적 으로 기록 합 니 다)Grade)"수험생 이름"내용 이 비어 있 지 않 은 기록 을"수험생 이름"으로 나 누고,그룹 결 과 를 선별 하여"총 성적"이 600 점 이상 인 것 을 선택한다.표준 순서의 SQL 문 구 는"select 수험생 이름,max(총 성적)as max 총 성적 from tb"이다.Grade where 수험생 이름 is not null group by 수험생 이름 having max(총 성적)>600 order by max 총 성적 위의 예제 에서 SQL 문장의 집행 순 서 는 다음 과 같다.(1).먼저 FROM 자 구 를 집행 하고 tbGrade 표 조립 데이터 원본 데이터(2).WHERE 자 구 를 실행 하고 tb 선별Grade 표 의 모든 데 이 터 는 NULL 의 데이터 가 아 닙 니 다(3).GROUP BY 자 구 를 실행 하고 tbGrade 표 는'학생 이름'열 에 따라 조 를 나 눕 니 다(4).max()집합 함 수 를 계산 하고'총 성적'에 따라 전체 성적 중 가장 큰 수치(5)를 구 합 니 다.HAVING 자 구 를 집행 하고 과정 을 선별 하 는 총 성적 이 600 점 이상 인 경우(7).ORDER BY 자 구 를 집행 하고 마지막 결 과 를'Max 성적'에 따라 정렬 합 니 다.자,이 를 보고...SQL 에서 selection 문장의 실행 순 서 를 다 아 셨 을 거 라 고 믿 습 니 다!하하!

좋은 웹페이지 즐겨찾기