Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как бы выкрутится? / 7 сообщений из 7, страница 1 из 1
30.03.2007, 09:39
    #34426468
Andrey Daeron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы выкрутится?
Достаточно часто приходится писать запросы типа:
Код: plaintext
1.
2.
3.
4.
5.
SELECT
 place_id, route_id
 FROM route_points
 WHERE (ord,route_id) in
 (SELECT min(ord),route_id FROM route_points GROUP BY route_id)
Ну, смысл простой - получение 1-й записи в определенной группе по определенному критерию, и так для каждой группы.
Естественно, что план выполнения такого запроса оставляет желать лучшего, а именно отсутствия второго прохода по той-же таблице. Интуитивно понятно, что он в общем-то нафиг не нужен.
Может есть какой-то другой подход или способ написания этого (такого плана) запроса без двух проходов по таблице?
...
Рейтинг: 0 / 0
30.03.2007, 09:47
    #34426498
Бабичев Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы выкрутится?
Конечно есть.
Ровно однопроходной вариант.
...
Рейтинг: 0 / 0
30.03.2007, 10:03
    #34426540
Andrey Daeron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы выкрутится?
Бабичев СергейКонечно есть.
Ровно однопроходной вариант.
Вот спасибо! Теперь буду два дня пить от радости :)
А если бы еще семплом поделиться или подход описать - можно на неделю в радостный запой уходить!
...
Рейтинг: 0 / 0
30.03.2007, 10:20
    #34426600
Бабичев Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы выкрутится?
Основная идея такого подхода показана тут .
...
Рейтинг: 0 / 0
30.03.2007, 10:27
    #34426637
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы выкрутится?
DISTINCT ON
...
Рейтинг: 0 / 0
30.03.2007, 12:09
    #34427026
Andrey Daeron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы выкрутится?
Бабичев СергейОсновная идея такого подхода показана тут .
Этот эээ "хулиганский" изврат примерно понятен. В свое время в мускуле так и делал (в те времена подзапросов у него совсем не было ). Но он несколько "некошерен".

По наводке LeXa NalBat получился супер запрос. Именно то, ради чего и заходил на форум.
Код: plaintext
1.
2.
3.
SELECT DISTINCT ON (route_id) place_id, route_id
    FROM route_points
    ORDER BY route_id, ord DESC

При сравнении плана выполнения 1-го и второго запроса на глаза наворачиваются слезы радости.
Нужно будет еще проверить на больших объемах данных. Там может быть не все так радужно.
...
Рейтинг: 0 / 0
02.04.2007, 10:34
    #34430557
Funny_Falcon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы выкрутится?
Andrey DaeronПри сравнении плана выполнения 1-го и второго запроса на глаза наворачиваются слезы радости.
Нужно будет еще проверить на больших объемах данных. Там может быть не все так радужно.

Если кол-во отбрасываемых значений на каждую запись не велико, то все нормально. (допустим 1 к 5)

Если же будь здоров, то не очень: DISTINCT ON делает выборку всех значений и только потом UNIQUE на получившемся наборе. Тупо, но сейчас так.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как бы выкрутится? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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