Поиск ближайшего

From: "Evgeny M(dot) Baldin" <E(dot)M(dot)Baldin(at)inp(dot)nsk(dot)su>
To: pgsql-ru-general(at)postgresql(dot)org
Subject: Поиск ближайшего
Date: 2005-04-06 08:57:02
Message-ID: Pine.LNX.4.58.0504061538050.24941@star.inp.nsk.su
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-ru-general

Добрый день

Так уж случилось, что на эксперименте для целей медленного контроля и
калибровок стали использовать PostgreSQL. К сожалению средство оказалось
не совсем адекватным для нужным нам целей.

Преамбула: ключом является время BeginTime. Запросу тоже передаётся
время Time. По запросу необходимо выдернуть ближайшую по времени запись,
где BeginTime<=Time (назовём эту запись валидной для Time)

Амбула: Запрос представляет из себя фразу типа:

select * from таблица where BeginTime<=Time
order by BeginTime desc limit 1;

Индексы работают, одиночные запросы проходят более-менее быстро, хотя тоже
хотелось бы побыстрее.

А вот попытка сопоставить валидные записи для массива времён, особенно
когда число записей в таблице превышает десятки тысяч наступает полный :(

Что хотелось бы: когда идёт поиск для какого-то числа на предмет
равенства, то используется бинарный поиск - это быстро. Хотелось бы иметь
поиск подобного рода, но не на предмет поиска точного значения, а на
предмет поиска ближайшего. Как я понимаю по числу действий это тоже самое,
просто надо помнить предыдущее число.

То есть нужен оператор типа равенства - назовём его CLOSE TO для работы с
временными данными, стой же самой скоростью работы для быстрого
сопоставления.

С уважением
Евгений

P.S. Я не программист - я пользователь, поэтому хотелось бы получить
результат малой кровью.

Responses

Browse pgsql-ru-general by date

  From Date Subject
Next Message Teodor Sigaev 2005-04-06 09:50:38 Re: Поиск ближ
Previous Message Genix 2005-04-06 04:47:27 Re: соединение