powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Почему запрос вываливается в полное сканирование таблицы а с цте - нет ?
8 сообщений из 8, страница 1 из 1
Почему запрос вываливается в полное сканирование таблицы а с цте - нет ?
    #40008031
комит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, коллеги.


Есть две таблицы:

big_table - более 100 Гб
small_table - около 1 Гб


Запрос


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
WITH cte AS (
  SELECT id FROM  small_table WHERE datecommit >'20201010'
)
SELECT 
 *
FROM 
  big_table
JOIN cte ON (big_table.small_id = cte.id);



отрабатывает быстро.




А если напрямую заджойнить запрос из cte, то он отрабатывает медленно:

Код: sql
1.
2.
3.
4.
5.
SELECT 
 big_table.*
FROM 
 Index Scan using
JOIN (SELECT id FROM  small_table WHERE datecommit >'20201010') cte ON (big_table.small_id = cte.id);



Появляется Seq Scan on big_table.

А в первом случае Index Scan using big_table_small_id_idx




Скажите, почему такие метамарфозы?

ведь в подзапрос помещен тот же самый запрос из cte...
...
Рейтинг: 0 / 0
Почему запрос вываливается в полное сканирование таблицы а с цте - нет ?
    #40008032
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
комит,

крайне странная идея задавать такие вопросы не показав полный план для обоих случаев (причем с analyze)



--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Почему запрос вываливается в полное сканирование таблицы а с цте - нет ?
    #40008038
комит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я его пересказал.
...
Рейтинг: 0 / 0
Почему запрос вываливается в полное сканирование таблицы а с цте - нет ?
    #40008040
комит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока мысль такая что cte формирует ограниченный объем данных, точность которого 100% для оптимизатора.

А когда запрос пихаем в джоин вместо cte, там данные не точные и оптимизатор выбирает другой план.


Обновление статистики тут никак не повлияло.





В общем. интересно выслушать мнение более опытных товарищей.
...
Рейтинг: 0 / 0
Почему запрос вываливается в полное сканирование таблицы а с цте - нет ?
    #40008046
Фотография mefman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
комит
я его пересказал.

войну и мир пойди перескажи.
...
Рейтинг: 0 / 0
Почему запрос вываливается в полное сканирование таблицы а с цте - нет ?
    #40008080
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
комит
я его пересказал.


"мне Рабинович по телефону напел"

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Почему запрос вываливается в полное сканирование таблицы а с цте - нет ?
    #40008081
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
комит,

Без планов ничего сказать однозначно нельзя, но хрустальный шар подсказывает, что во втором случае условие джойна уходит в подзапрос и отрабатывает до фильтра.
...
Рейтинг: 0 / 0
Почему запрос вываливается в полное сканирование таблицы а с цте - нет ?
    #40008126
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
комит
я его пересказал.


на всякий случай если не дошло - в плане перво наперво нужны ЦИФРЫ из которых база считает план а не сам план.
Во всяком случае для таких вопросов как у вас... и без цифр и конкретного вида плана - сказать ничего нельзя.

Или вы считаете что цифры costs/rows там для красоты?


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Почему запрос вываливается в полное сканирование таблицы а с цте - нет ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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