Я пытаюсь диагностировать медленный запрос, используя EXPLAIN ANALYZE
. Я новичок в команде, поэтому я прочитал http://www.postgresql.org/docs/9.3/static/using-explain.html. В плане запроса используется "CTE-сканирование", но я не знаю, что это такое, по сравнению с, скажем, последовательным сканированием - и, что более важно, то, что в общем случае сканирование CTE для производительности запросов.
Что такое CTE-сканирование и каковы его последствия для производительности?
Ответ 1
"Сканирование CTE" представляет собой последовательное сканирование материализованных результатов термина CTE (названный раздел, такой как "blah" в CTE, как WITH blah AS (SELECT ...)
.
Материализованный означает, что PostgreSQL рассчитал результаты и превратил их во временный массив строк, это не просто использование CTE, как представление.
Основной вывод заключается в том, что выбор небольшого подмножества из термина CTE и отбрасывание остального может сделать много потраченных впустую работ, потому что части, которые вы отбрасываете, все равно должны быть полностью рассчитаны.
Подробнее см. недавнее сообщение в блоге, которое я написал по этой теме.