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. Я не программист - я пользователь, поэтому хотелось бы получить
результат малой кровью.
From | Date | Subject | |
---|---|---|---|
Next Message | Teodor Sigaev | 2005-04-06 09:50:38 | Re: Поиск ближ |
Previous Message | Genix | 2005-04-06 04:47:27 | Re: соединение |