CTE (WITH 쿼리)의 최적화 차단 동작이 SQL : 2008 표준에 지정되어 있습니까? 그렇다면 어디서?


23

WITH서버가 CTE 쿼리로 필터를 푸시 다운하거나 CTE에서 공통 표현식을 끌어 올 수없는 최적화 펜스 역할을하는 쿼리 (공통 테이블 표현식 또는 CTE)에 대한 참조가 자주 나타 납니다. SQL 표준에 필요한 동작입니다.

열팽창 계수는 확실히 최적화 울타리 PostgreSQL의에서 ...하지만이 표준에서 요구하는, 또는 실제로 단지 구현 세부?

예를 들어, 다음 메일 링리스트 게시물은 표준이라고 주장하거나 제안합니다.

주석에서 언급 한 후에 나는 그것이 지정된 곳을 물었다-SQL : 2008의 유일한 초안을 본 후에 나는 그것을 찾는 데 많은 운이 없다고 접근했다.

나는 아직 집중적으로 표준을 연구하지 않았으므로 다음과 같은 누군가의 제안을 기대하고 있습니다. PostgreSQL에서 CTE의 최적화 펜싱이 실제로 표준에 필요합니까? 그렇다면, 어디에서 지정 했습니까? 또는 Pg 메일 링리스트의 문구가 잘못 되었습니까?

할 일 목록 의 스레드 CTE 최적화 펜스 도 참조하십시오 . .

답변:


10

구현 세부 사항이라고 생각합니다.

SQL- 데이터 및 스키마, 호스트 매개 변수 및 호스트 변수, SQL 매개 변수 및 SQL 변수에 미치는 영향이 동일한 경우 일반 규칙에 정의 된 정확한 조치 순서를 수행하기 위해 적합한 구현이 필요하지 않습니다. 순서. 효과적으로 용어 는 구현에 의해 다른 방식으로 달성 될 수있는 행동을 강조하기 위해 사용됩니다. 1

구현자는 20 가지 방법으로도 공통 테이블 표현식을 20 번 평가할 수 있으며 여전히 적합한 구현을 가질 수 있다고 생각합니다 . 유일한 관련 문제는 일반 규칙에 정의 된 일련의 동작의 "효과가 효과와 동일한 지"여부입니다.

[1]. 로컬 파일명 5CD2-01-Framework-2006-01.pdf, p. 41 나는이 없다 아무 나는 그것을 가지고 생각합니다. 구글은 알고있을 것이다.


2
PostgreSQL은 CTE에서 부작용이나 데이터 수정 명령문이있는 함수를 사용할 수 있으므로 CTE를 차단해야합니다. 나는 그것이 단지 함수 STABLE또는 호출하는 CTE를 자유롭게 인라인 할 수 있음을 의미한다고 생각합니다 IMMUTABLE.
Craig Ringer

쓰기 가능한 CTE는 아직 SQL 표준 이 아니라고 생각 하지만 긍정적이지 않습니다.
Mike Sherrill 'Cat Recall'10

wCTE는 확실히 PostgreSQL 확장입니다. SQL에서 사용자 정의 함수 SQL/PSM가 Pg가 전혀 지원하지 않는 함수이기 때문에 DML을 실행하는 함수가 확실 하지 않다 ...
Craig Ringer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.