Re: Поиск ближ - Mailing list pgsql-ru-general

From Teodor Sigaev
Subject Re: Поиск ближ
Date
Msg-id 4253B0EE.6060109@sigaev.ru
Whole thread Raw
In response to Поиск ближайшего  ("Evgeny M. Baldin" <E.M.Baldin@inp.nsk.su>)
List pgsql-ru-general

Evgeny M. Baldin wrote:
> Добрый день
>
>  Так уж случилось, что на эксперименте для целей медленного контроля и
> калибровок стали использовать PostgreSQL. К сожалению средство оказалось
> не совсем адекватным для нужным нам целей.
>
>  Преамбула: ключом является время BeginTime. Запросу тоже передаётся
> время Time. По запросу необходимо выдернуть ближайшую по времени запись,
> где BeginTime<=Time (назовём эту запись валидной для Time)
>
>  Амбула: Запрос представляет из себя фразу типа:
>
> select * from таблица where BeginTime<=Time
>                        order by BeginTime desc limit 1;
>
> Индексы работают, одиночные запросы проходят более-менее быстро, хотя тоже
> хотелось бы побыстрее.
>
> А вот попытка сопоставить валидные записи для массива времён, особенно
> когда число записей в таблице превышает десятки тысяч наступает полный :(

Попробуй отсортировать поисковый массив по временам, тогда кеш постгреса будет
использоваться более эффективно. Вместе с этим может оказаться полезным
кластеризация таблицы по индексу (команда cluster).


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

Поиск первого занчения по условию < или > ничем не отличается от поиска на
равенство, поскольку алгоритм тот же.



>
> То есть нужен оператор типа равенства - назовём его CLOSE TO для работы с
> временными данными, стой же самой скоростью работы для быстрого
> сопоставления.
>
> С уважением
>     Евгений
>
> P.S.  Я не программист - я пользователь, поэтому хотелось бы получить
> результат малой кровью.
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
>       subscribe-nomail command to majordomo@postgresql.org so that your
>       message can get through to the mailing list cleanly

--
Teodor Sigaev                                   E-mail: teodor@sigaev.ru
                                                    WWW: http://www.sigaev.ru/

pgsql-ru-general by date:

Previous
From: "Evgeny M. Baldin"
Date:
Subject: Поиск ближайшего
Next
From: Oleg Bartunov
Date:
Subject: Re: Поиск ближайшего