powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите оптимизировать запрос.
13 сообщений из 13, страница 1 из 1
Помогите оптимизировать запрос.
    #39553827
Архиневолокоточ ерепопиндрик-й
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть запрос c вложеным подзапросом такого типа:

Код: sql
1.
2.
3.
SELECT id,
(SELECT f1 FROM table2 WHERE id=t1.id LIMIT 1)
FROM table1;




Подзапрос (вложеный который) отрабатывает за 20мс.

Сам запрос, без подзапроса тоже быстро отрабатывает.

Но т.к. подзапросов этих очень много, весь запрос с подзапросом работает десятки секунд


Подскажите, как его можно оптимизировать?
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос.
    #39553832
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Архиневолокоточ ерепопиндрик-й,

а что вам мешает инер джойн делать?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT
  t1.id,
  t2.f1
FROM
  table1 AS t1
  INNER JOIN
  table2 AS t2
  ON t2.id = t1.id 
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос.
    #39553835
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lonepsycho,

Судя по лимиту в подзапрос - у человека отношение таблиц один-ко-многим. А мешает сделать через соединение, как всегда - недостаточное владение предметной областью....
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос.
    #39553841
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина Анна,

тогда надо знать больше о данных, которые там хранятся. в прочем, бесцеремонный лимит на селект по ид, без каких либо сортировок, момент интересный.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос.
    #39554136
Архиневолокоточ ерепопиндрик-й
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LonepsychoЩукина Анна,

тогда надо знать больше о данных, которые там хранятся. в прочем, бесцеремонный лимит на селект по ид, без каких либо сортировок, момент интересный.

Верно подмечено.

Я неправильно упростил суть запроса.

В подзапросе естественно есть сортировка, по дате: нужно самое свежее значение.

Вот так корректно:

Код: sql
1.
2.
3.
SELECT id,
(SELECT f1 FROM table2 WHERE id=t1.id ORDER BY date1 DESC LIMIT 1)
FROM table1;
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос.
    #39554139
Архиневолокоточ ерепопиндрик-й
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LonepsychoАрхиневолокоточ ерепопиндрик-й,

а что вам мешает инер джойн делать?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT
  t1.id,
  t2.f1
FROM
  table1 AS t1
  INNER JOIN
  table2 AS t2
  ON t2.id = t1.id 



Это было бы слишком просто :)

Во второй табличке с t1.id много записей, а нужна только самая свежая по date1.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос.
    #39554156
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Архиневолокоточ ерепопиндрик-йLonepsychoЩукина Анна,

тогда надо знать больше о данных, которые там хранятся. в прочем, бесцеремонный лимит на селект по ид, без каких либо сортировок, момент интересный.

Верно подмечено.

Я неправильно упростил суть запроса.

В подзапросе естественно есть сортировка, по дате: нужно самое свежее значение.

Вот так корректно:

Код: sql
1.
2.
3.
SELECT id,
(SELECT f1 FROM table2 WHERE id=t1.id ORDER BY date1 DESC LIMIT 1)
FROM table1;



Ну так покажите explain (analyze, costs, buffers, timing) для него чтобы посмотреть что там не так.
20ms как то многовато кроме случая когда диски тормозят.
Хотя конечно смотря сколько строк в table1.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос.
    #39554160
Архиневолокоточ ерепопиндрик-й
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukАрхиневолокоточ ерепопиндрик-йпропущено...


Верно подмечено.

Я неправильно упростил суть запроса.

В подзапросе естественно есть сортировка, по дате: нужно самое свежее значение.

Вот так корректно:

Код: sql
1.
2.
3.
SELECT id,
(SELECT f1 FROM table2 WHERE id=t1.id ORDER BY date1 DESC LIMIT 1)
FROM table1;



Ну так покажите explain (analyze, costs, buffers, timing) для него чтобы посмотреть что там не так.
20ms как то многовато кроме случая когда диски тормозят.
Хотя конечно смотря сколько строк в table1.

В подзапросе
Код: sql
1.
(SELECT f1 FROM table2 WHERE id=t1.id ORDER BY date1 DESC LIMIT 1)


там все нормально.
indexScan.
Таблица большая.

Плюс в цикле делал этот подзапрос, по каждому id, которые есть в выборке с замером времени.

20ms складываются в секунды

Можно ли как-то хитро эти две таблицы соединить?
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос.
    #39554163
Архиневолокоточ ерепопиндрик-й
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть через временную таблицу как нить?
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос.
    #39554178
Архиневолокоточ ерепопиндрик-й
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Архиневолокоточ ерепопиндрик-йМожет быть через временную таблицу как нить?

Через временную таблицу отменяется, т.к. БД редонли
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос.
    #39554181
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Архиневолокоточ ерепопиндрик-й,

LATERAL
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос.
    #39554185
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Архиневолокоточ ерепопиндрик-й,

Без результатов explain обсуждать смысла вообще нет. Может оно там у вас вообще в диски упирается и тогда нормальное железо вам в помощь.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос.
    #39554188
Архиневолокоточ ерепопиндрик-й
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, получилось.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите оптимизировать запрос.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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