[SQL] 어떤 순서로 쿼리 및 하위 쿼리는 SQL 엔진에 의해 실행됩니다?
SQL어떤 순서로 쿼리 및 하위 쿼리는 SQL 엔진에 의해 실행됩니다?
안녕하세요 하나의 질문에 대한 호기심은 SQL 테스트 및 의심을 / 제작 :
어떤 순서로 쿼리 및 하위 쿼리는 SQL 엔진에 의해 실행됩니다?
답변이었다
나는 마지막 대답 (그냥 가장 신뢰할 수 w.r.t. 다른 사람이라고 가정하면)을 choosed 할. 호기심을 지금 :
어디에서 이것에 대해 읽고 잠시 그 모든 아래의 메커니즘은 무엇을 할 수 있습니까?
감사합니다.
해결법
-
==============================
1.옵션 4는 가까운 거리에 있습니다.
옵션 4는 가까운 거리에 있습니다.
SQL은 선언적이다 : 당신은 당신이 원하는 그것이 가장 좋은 (시간에 따라 / "비용"등)을 수행하는 방법을 작동하는 무슨 쿼리 최적화를 말한다. 이 겉으로는 동일한 쿼리 및 통계에 따라 테이블, 데이터 배포, 행 수, 병렬 하나님 다른 알고에 따라 다를 수 있습니다.
이것은 정해진 순서가있는 것을 의미한다. 그러나 "즉석에서"매우 아니다
심지어 동일한 서버, 스키마, 쿼리 및 데이터 나 실행 계획이 다른 봤어요
-
==============================
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.는 SQL 엔진 (하위) 쿼리가 실행되는 순서를 최적화하려고합니다. 그것에 대해 결정하는 부분은 쿼리 최적화 프로그램이라고합니다. 쿼리 최적화 프로그램은 많은 행이 테이블 인덱스와 어떤 필드에이있는 각 테이블에있는 방법을 알고 있습니다. 먼저 실행하기 위해 어떤 부분을 결정하기 위해 해당 정보를 사용합니다.
는 SQL 엔진 (하위) 쿼리가 실행되는 순서를 최적화하려고합니다. 그것에 대해 결정하는 부분은 쿼리 최적화 프로그램이라고합니다. 쿼리 최적화 프로그램은 많은 행이 테이블 인덱스와 어떤 필드에이있는 각 테이블에있는 방법을 알고 있습니다. 먼저 실행하기 위해 어떤 부분을 결정하기 위해 해당 정보를 사용합니다.
-
==============================
4.T-SQL 쿼리 :이 주제에 읽을 뭔가를 원하는 경우, 내부 SQL 서버 2008의 사본을 얻을. 이 쿼리는 SQL Server의 논리적 및 물리적 처리 방법에 대한 두 개의 전용 장 있습니다.
T-SQL 쿼리 :이 주제에 읽을 뭔가를 원하는 경우, 내부 SQL 서버 2008의 사본을 얻을. 이 쿼리는 SQL Server의 논리적 및 물리적 처리 방법에 대한 두 개의 전용 장 있습니다.
-
==============================
5.내가 두 번째 대답이 더 그럴듯하다고 생각 ... 보통의 당신의 DBMS에서 따라 다르지만. 국무 쿼리는 일반적으로 서브 쿼리 결과없이 계산할 수 없습니다.
내가 두 번째 대답이 더 그럴듯하다고 생각 ... 보통의 당신의 DBMS에서 따라 다르지만. 국무 쿼리는 일반적으로 서브 쿼리 결과없이 계산할 수 없습니다.
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
'SQL' 카테고리의 다른 글
[SQL] 값이 오라클에 숫자가 아닌 경우 어떻게 알 수 있습니까? (0) | 2020.05.03 |
---|---|
[SQL] 카운트를 사용하여 발생 횟수를 찾을 수 (0) | 2020.05.03 |
[SQL] 어떻게 SQL에서 연산자 PHP 배열을 사용 하는가? (0) | 2020.05.03 |
[SQL] 내림차순 날짜와 시간에 의해 정렬? (0) | 2020.05.02 |
[SQL] A의 조건의 순서는 WHERE 절 MySQL의 성능에 영향을 미칩니 까? (0) | 2020.05.02 |