Re: Поиск ближ

From: Teodor Sigaev <teodor(at)sigaev(dot)ru>
To: Oleg Bartunov <oleg(at)sai(dot)msu(dot)su>
Cc: "Evgeny M(dot) Baldin" <E(dot)M(dot)Baldin(at)inp(dot)nsk(dot)su>, pgsql-ru-general(at)postgresql(dot)org
Subject: Re: Поиск ближ
Date: 2005-04-06 13:26:12
Message-ID: 4253E374.5030003@sigaev.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-ru-general

Oleg Bartunov wrote:
> On Wed, 6 Apr 2005, Oleg Bartunov wrote:
>
>> On Wed, 6 Apr 2005, Evgeny M. Baldin wrote:
>>
>>>
>>> calibrations=# EXPLAIN ANALYZE select begintime from vepp4current_key
>>> where begintime<'yesterday' order by begintime limit 1;
>>>
>
> кстати, а сколько всего записей без ' limit 1' ?
> Если там много, то чудес нет, сортировать десятки тысяч записей требуется
> время. Поэтому тебе надо использовать range, т.е. задать разумный нижний
> предел и не париться. Это дело приложения и серого вещества
> разработчиков приложения.
>
Постгрес умнее, в данном случае он не сортирует, он пользуетсся свойством
индекса: при линейной выборке из индекса данные уже сортированы.

>
> Другое дело, и мы пару раз этот вопрос поднимали, что limit на самом деле
> является синтаксической затычкой, т.е. все вытаскивается, сортируется
> согласно order by, а потом тупо и грязно вытаскиваются необходимые данные.
> На самом деле, все можно делать по уму, т.е. использовать partial sort,
> например, в твоей задаче надо вытащить только 1 строчку, а про все
> остальные
> тебе совсем не важно, поэтому и сортировку можно остановить.
> Есть и еще алгоритмы. А ключевым словом, к твоей задаче является
> 'top-k query' и на этк тему написаноо куча работ. Мы с Федей Сигаевым
> года три назад даже патч сделали, но тогда его не приняли из-за его
> плохой реализации.
>
>
>
>
>>
>
> Regards,
> Oleg
> _____________________________________________________________
> Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
> Sternberg Astronomical Institute, Moscow University (Russia)
> Internet: oleg(at)sai(dot)msu(dot)su, http://www.sai.msu.su/~megera/
> phone: +007(095)939-16-83, +007(095)939-23-83
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
> subscribe-nomail command to majordomo(at)postgresql(dot)org so that your
> message can get through to the mailing list cleanly

--
Teodor Sigaev E-mail: teodor(at)sigaev(dot)ru
WWW: http://www.sigaev.ru/

In response to

Browse pgsql-ru-general by date

  From Date Subject
Next Message Evgeny M. Baldin 2005-04-06 13:44:31 Re: Поиск ближайшего
Previous Message Oleg Bartunov 2005-04-06 13:06:07 Re: Поиск ближайшего