powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Можно ли с CTE использовать индексы?
9 сообщений из 9, страница 1 из 1
Можно ли с CTE использовать индексы?
    #38983655
PCContra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немного подтормаживает работа с большой CTE. Я думаю, мне бы помогло создание индексов. Можете привести запрос с созданием CTE и индексом? Или есть другие варианты?
...
Рейтинг: 0 / 0
Можно ли с CTE использовать индексы?
    #38983678
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PCContraНемного подтормаживает работа с большой CTE. Я думаю, мне бы помогло создание индексов. Можете привести запрос с созданием CTE и индексом? Или есть другие варианты?
какие еще индексы в cte?
...
Рейтинг: 0 / 0
Можно ли с CTE использовать индексы?
    #38983690
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PCContra,

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

P.S.
В некоторых СУБД CTE вообще называется SUBQUERY FACTORING CLAUSE, что, как бы, намекает на их предназначение... ;)
Хотя, справедливости ради, в этой же СУБД есть возможность управления тем, как поступать с результатом запроса в CTE для более эффективного многократного его использования в последующей части запроса - использовать ли его как встроенное представление (on-line запрос), или же материализовать результат на уровне временной таблицы...
...
Рейтинг: 0 / 0
Можно ли с CTE использовать индексы?
    #38983793
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan Durak,

справедливости ради -- пж всегда материализует cte

(есть исключение - если есть Cte--селект в списке всех cte, и он не используется в результирующем запросе cte--"полистейтмента" -- то он будет опущен оптимизатором за ненадобностью [обламывался с вызовом пишущих ф-й]. В то время как dml--cte--сабстейтменты будут исполнены, даже если их returning нигде ниже не используется. Документировано ли это -- не знаю. )

а раз материализует, то напрашивается
Код: sql
1.
2.
WITH foo(f1,...fn) [INDEXED BY (...)[, BY (...)]] AS (SELECT ..... ) 
[do] SELECT ....;


ну или планировщик должен уметь это сам решить.
...
Рейтинг: 0 / 0
Можно ли с CTE использовать индексы?
    #38983804
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина АннаPCContra,

CTE, по сути, синтаксический "рафинад", нужный для более удобной, наглядной и понятной формы записи сложных запросов.
<>это [пока], не верно в пж. т.к. тот всегда материализует cte -- т.е. это не простой алиасинг типа "with temporary view"

в тех случаях, когда вам этого не надо (т.е. материализация тормозит и избыточна) -- приходится пользоваться обычными именованными подзапросами, повторяя его столько раз, сколько нужно. что несколько громоздко в записи, но кажется оптимайзер опознаёт дублирующие вхождения (могу тут врать).
...
Рейтинг: 0 / 0
Можно ли с CTE использовать индексы?
    #38983997
PCContra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqIvan Durak,

справедливости ради -- пж всегда материализует cte

(есть исключение - если есть Cte--селект в списке всех cte, и он не используется в результирующем запросе cte--"полистейтмента" -- то он будет опущен оптимизатором за ненадобностью [обламывался с вызовом пишущих ф-й]. В то время как dml--cte--сабстейтменты будут исполнены, даже если их returning нигде ниже не используется. Документировано ли это -- не знаю. )

а раз материализует, то напрашивается
Код: sql
1.
2.
WITH foo(f1,...fn) [INDEXED BY (...)[, BY (...)]] AS (SELECT ..... ) 
[do] SELECT ....;


ну или планировщик должен уметь это сам решить.

Код: sql
1.
2.
WITH foo(f1,...fn) [INDEXED BY (...)[, BY (...)]] AS (SELECT ..... ) 
[do] SELECT ....;

так работает? я такого в мануале 9.4 не нашел. Искал где WITH запросы разбираются и где select
...
Рейтинг: 0 / 0
Можно ли с CTE использовать индексы?
    #38984001
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PCContra,
нет , так не работает.

этой кляузы в предложении "with" не предусмотрено.

так "напрашивается" [см. выше], в силу того, что всё равно оно материализовано (пока).
...
Рейтинг: 0 / 0
Можно ли с CTE использовать индексы?
    #38984091
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqPCContra,
нет , так не работает.

этой кляузы в предложении "with" не предусмотрено.

так "напрашивается" [см. выше], в силу того, что всё равно оно материализовано (пока).
до такого "напрашивается" даже оракл не додумался...
...
Рейтинг: 0 / 0
Можно ли с CTE использовать индексы?
    #38984112
PCContra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если "оно материализовано" (т.е. как я понимаю, qwwq иммет ввиду "записано на жесткий диск"), то может его лучше заменить на материализованное представление? Там вроде индексы поддерживаются

Как идея?
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Можно ли с CTE использовать индексы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]