powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / WITH AS стоит ли использовать?
6 сообщений из 6, страница 1 из 1
WITH AS стоит ли использовать?
    #39646274
polin11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Использую СУБД Postgresql, есть запрос
Код: sql
1.
2.
3.
SELECT *
FROM Table1
WHERE Filed1 IN (SELECT Fileld1 FROM Table2 WHERE Fileld2='A' AND Fileld3 IS NULL)



Нужно его оптимизировать, таблицы большие, забирает большие ресурсы, хочу его переписать, используя WITH AS, таким образом

Код: sql
1.
2.
3.
4.
5.
6.
WITH  my_table AS (
   SELECT Fileld1 FROM Table2 WHERE Fileld2='A' AND Fileld3 IS NULL
) 
SELECT *
FROM Table1
WHERE Filed1 IN (SELECT * FROM my_table)



есть ли смысл это делать, есть ли какой - нибудь профит в этом?
...
Рейтинг: 0 / 0
WITH AS стоит ли использовать?
    #39646288
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
polin11,

Сделаете хуже. CTE материализуется - будет плохо если в выражении будет много данных.

explain (analyze,buffers) смотрите.
...
Рейтинг: 0 / 0
WITH AS стоит ли использовать?
    #39646484
angel_zar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
WITH  my_table AS (
   SELECT Fileld1 FROM Table2 WHERE Fileld2='A' AND Fileld3 IS NULL
) 
SELECT *
FROM Table1
WHERE Filed1 IN (SELECT * FROM my_table)



in на join переделайте.

Код: sql
1.
2.
3.
4.
5.
6.
WITH  my_table AS (
   SELECT Fileld1 FROM Table2 WHERE Fileld2='A' AND Fileld3 IS NULL
) 
SELECT Table1.*
FROM Table1
INNER JOIN my_table ON Table1.Filed1=my_table.Fileld1
...
Рейтинг: 0 / 0
WITH AS стоит ли использовать?
    #39646560
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так в пж надо только если в виз попадает мало записей. т.е. если вы наперед это знаете
angel_zar
in на join переделайте.


как правило вот так , если нужен нестед луп. но с переходом в хеш-джойн от статистики
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT T1.* FROM Table2 my_table 
,lateral (
SELECT Table1.*
FROM Table1
WHERE  Table1.Filed1=my_table.Fileld1
-- limit  po obstoyatelstvam
) t1
WHERE my_table.Fileld2='A' AND my_table.Fileld3 IS NULL
...
Рейтинг: 0 / 0
WITH AS стоит ли использовать?
    #39646562
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,

вариант с экзистс при обратных пропорциях кардинальностей не охвачен
...
Рейтинг: 0 / 0
WITH AS стоит ли использовать?
    #39646693
AlexOS02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если подойти к этому вопросу по другому и поддержать соединение таблиц индексами? Если очень часто этот запросы выполняется - можно свернуть SELECT Fileld1 FROM Table2 WHERE Fileld2='A' AND Fileld3 IS NULL до index_only_scan.

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


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