Подтвердить что ты не робот

Что такое CTE-сканирование и каковы его последствия для производительности?

Я пытаюсь диагностировать медленный запрос, используя EXPLAIN ANALYZE. Я новичок в команде, поэтому я прочитал http://www.postgresql.org/docs/9.3/static/using-explain.html. В плане запроса используется "CTE-сканирование", но я не знаю, что это такое, по сравнению с, скажем, последовательным сканированием - и, что более важно, то, что в общем случае сканирование CTE для производительности запросов.

4b9b3361

Ответ 1

"Сканирование CTE" представляет собой последовательное сканирование материализованных результатов термина CTE (названный раздел, такой как "blah" в CTE, как WITH blah AS (SELECT ...).

Материализованный означает, что PostgreSQL рассчитал результаты и превратил их во временный массив строк, это не просто использование CTE, как представление.

Основной вывод заключается в том, что выбор небольшого подмножества из термина CTE и отбрасывание остального может сделать много потраченных впустую работ, потому что части, которые вы отбрасываете, все равно должны быть полностью рассчитаны.

Подробнее см. недавнее сообщение в блоге, которое я написал по этой теме.