Чи визначено поведінку огорожі оптимізації CTE (З запитом) у стандарті SQL: 2008? Якщо так, то де?


23

Я бачу часті посилання на WITHзапити (загальні вирази таблиць або CTE), що діють як огорожу для оптимізації, де сервер не може штовхати фільтри вниз на запити CTE, витягувати загальні вирази вгору із CTE тощо. Це часто стверджується бути поведінкою, що вимагається стандартами SQL.

CTE, безумовно, є оптимізаційною огорожею в PostgreSQL ... але чи цього вимагає стандарт, чи насправді просто деталізація щодо впровадження?

Наприклад, ці повідомлення в списках розсилки стверджують або припускають, що це стандарт:

Після згадування про це у коментарі мене запитали, де це вказано - і після перегляду єдиного проекту SQL: 2008 я маю доступ до мене, не маючи великого шансу знайти його.

Я ще не інтенсивно вивчав стандарт, тому сподіваюся на пропозицію від того, хто має: Чи дійсно стандарту потрібне огородження оптимізації CTE в PostgreSQL? І якщо так, то де це вказано? Або заяви у списку розсилки Pg помилкові?

Дивіться також нитку огорожі оптимізації CTE у списку todo? .

Відповіді:


10

Я думаю, що це деталь реалізації.

Відповідна реалізація не потрібна для виконання точної послідовності дій, визначених Загальними правилами, за умови, що її вплив на SQL-дані та схеми, на параметри хоста і змінну хоста, а також на параметри SQL і змінні SQL є ідентичним ефекту цього послідовність. Термін ефективно використовується для підкреслення дій, ефект яких може бути досягнутий іншим способом шляхом реалізації. 1

Я думаю, що реалізатор міг би оцінити загальний вираз таблиці 20 разів, навіть 20 різними способами, і все-таки мати відповідну реалізацію. Єдине актуальне питання полягає в тому, "чи є його дія ... ідентичним ефекту" послідовності дій, визначених Загальними правилами.

[1]. Розділ 6.3.3.3, "Порядок оцінки правил", у проекті стандарту SQL 2008, що має локальне ім'я файлу 5CD2-01-Framework-2006-01.pdf, стор. 41 Поняття не маю, де я це взяв. Google може знати.


2
Це має сенс - і оскільки PostgreSQL дозволить використовувати функції з побічними ефектами або заявами, що змінюють дані, в CTE, він повинен огороджувати такі CTE. Я думаю, це означає, що було б вільним вбудовувати CTE, які викликають тільки STABLEабо IMMUTABLEфункції.
Крейг Рінгер

Я думаю, що зареєстровані CTE ще не містяться в жодних стандартах SQL, але я не позитивний.
Майк Шеррілл 'Відкликання котів'

wCTE, безумовно, розширення PostgreSQL. Менш зрозуміло, чи є функції, які виконують DML, оскільки визначені користувачем функції в SQL - це те, SQL/PSMщо Pg взагалі не підтримує ...
Крейг Рінгер,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.