powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Hint для запроса​?
7 сообщений из 7, страница 1 из 1
Hint для запроса​?
    #39905469
PinkCat.000003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть запрос вида:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
WITH Set1 AS 
(
  SELECT a,b,SUM(c) AS sumc
  FROM table1
  --WHERE a = 123456
  GROUP BY a,b
),
Set2 AS 
(
  SELECT d,e,SUM(f) AS sumf
  FROM table2
  --WHERE d = 123456
  GROUP BY d,e
)
SELECT 
  Set1.*, 
  Set2.sumf
  FROM Set1 
           INNER JOIN Set2    ON Set1.a    = Set2.d   AND   Set1.b = Set2.e
           INNER JOIN Table3 ON Table3.h = Set2.d  AND   Table3.k = Set2.e
  WHERE Table3.h = 123456
      AND Table3.m = 'abc'



table1 & table2 - относительно большие таблицы - более 8.000.000 записей каждая.
План выполнения запроса говорит что они будут сканироваться и группироваться полностью, потом джойнится и только потом фильтроваться. Всего - 21.5 секунда.
Если добавить фильтрацию там где она закоментирована - скана не будет, будет один реад... по времени - 0.004 сек.

По запросу: есть - фильтр, есть - джойны по полю фильтрации, но фильтр не применяется до джойнов.

Вопросик - есть ли хинты которые поменяют порядок и поставят фильтрацию до джойна?
Просто не хочется писать фильтр каждый раз.
...
Рейтинг: 0 / 0
Hint для запроса​?
    #39905479
alex-ls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поиск по слову хинты не делали?
...
Рейтинг: 0 / 0
Hint для запроса​?
    #39905493
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PinkCat.000003,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SELECT 
	Set1.*, 
	Set2.sumf
FROM Table3
,lateral (
	SELECT d,e,SUM(f) AS sumf
	FROM table2
	WHERE Table3.h = table2.d  AND   Table3.k = table2.e
	GROUP BY d,e
) Set2
,lateral (
	SELECT a,b,SUM(c) AS sumc
	FROM table1
	WHERE table1.a    = Set2.d   AND   table1.b = Table3.k
	GROUP BY a,b
) Set1
WHERE Table3.h = 123456
	AND Table3.m = 'abc'



?
...
Рейтинг: 0 / 0
Hint для запроса​?
    #39905500
PinkCat.000003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex-ls,

Смотрел,

https://habr.com/ru/post/169751/
https://wiki.postgresql.org/wiki/OptimizerHintsDiscussion

но не понял - новая, для меня, база, нет базиса куда привязывать информацию.
...
Рейтинг: 0 / 0
Hint для запроса​?
    #39905515
PinkCat.000003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,

То, что доктор прописал... Спасибки.
Еще бы линку где об этом понятно почитать...
...
Рейтинг: 0 / 0
Hint для запроса​?
    #39905536
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Hint для запроса​?
    #39905563
PinkCat.000003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,

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


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