powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Индексированный with as
6 сообщений из 6, страница 1 из 1
Индексированный with as
    #39008859
Alexey Agafonov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет. Этото вопрос тему я разместил в двух форумах - тут и в Oracle. Не знаю, один ли это прием или нет. В общем суть вопроса - можно ли в CTE с помощью with as сделать индексированный набор, чтобы потом по нему не был full scan? У меня with as с друго таблицей, в обоих ~1 000 000 записей и склеиваются по ключу. Упрощенно это так:

Код: plaintext
1.
2.
3.
with t as
(select id, name from contract1 where name like '%o%')
select * from t left join contract on contract.id=t.id and contract.name=t.name
where contract.id is null

Кто не понял - хочу вывести записи из contract1 по некому фильтру и такие, которых нет в таблице contract или у которых название отличаются с той же contract. Возможно ли это?

Спасибо.
...
Рейтинг: 0 / 0
Индексированный with as
    #39008868
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey AgafonovВсем привет. Этото вопрос тему я разместил в двух форумах - тут и в Oracle. Не знаю, один ли это прием или нет. В общем суть вопроса - можно ли в CTE с помощью with as сделать индексированный набор, чтобы потом по нему не был full scan? У меня with as с друго таблицей, в обоих ~1 000 000 записей и склеиваются по ключу. Упрощенно это так:

Код: plaintext
1.
2.
3.
with t as
(select id, name from contract1 where name like '%o%')
select * from t left join contract on contract.id=t.id and contract.name=t.name
where contract.id is null

Кто не понял - хочу вывести записи из contract1 по некому фильтру и такие, которых нет в таблице contract или у которых название отличаются с той же contract. Возможно ли это?

Спасибо.

Построение индекса временного на 1 запрос (даже если бы это было возможно) было бы дороже по ресурсам чем seq scab+hash join или sort+merge join. База сама прекрасно разберется как лучше.

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Индексированный with as
    #39008880
Alexey Agafonov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня один селект отрабатывает за 10 секунд, а приведенный мною запрос (миллион left join миллион) уже час. Это меня и смутило.
...
Рейтинг: 0 / 0
Индексированный with as
    #39008897
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Agafonov, если вдруг поможет,
есть возможность с помощью триграмм проиндексировать ваше поле gin/gist индексом.
Тогда любой LIKE подцепится.
В местном FAQ даже тесты оставлял - смотрите.
Главное, чтоб в вашем текстовом поле не было сочинений Льва Толстого.
...
Рейтинг: 0 / 0
Индексированный with as
    #39008916
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey AgafonovУ меня один селект отрабатывает за 10 секунд, а приведенный мною запрос (миллион left join миллион) уже час. Это меня и смутило.

Такие вопросы начинаются с приведения explain analyze запроса.
Или если не получается привести explain analyze хотя бы explain.

Какой 1 select за 10 секунд отрабатывается?

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Индексированный with as
    #39008931
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Agafonov,

В случае с PostgreSQL, все WITH подзапросы материализуются (дается гарантия, что исходный запрос будет выполнен только 1 раз).
Т.е. предикаты внутрь таких подзапросов не проталкиваются.

В ORACLE-же такой изоляции нету и для получения аналогичного Postgres-у поведения надо добавить хинт /*+ MATERIALIZE */ в подзапрос.

Приведите `EXPLAIN (analyze, buffers)` ваших запросов, чтоб более детально говорить.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Индексированный with as
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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