Re: Поиск ближ
От | Teodor Sigaev |
---|---|
Тема | Re: Поиск ближ |
Дата | |
Msg-id | 4253B0EE.6060109@sigaev.ru обсуждение исходный текст |
Ответ на | Поиск ближайшего ("Evgeny M. Baldin" <E.M.Baldin@inp.nsk.su>) |
Список | 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 по дате отправления: