|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Evgenij M. Baldin 2:5020/400 24 Jan 2003 19:19:51 To : Arkady A Drovosekov Subject : Re: PostgreSQL непонятки с индексами -------------------------------------------------------------------------------- Добрый день Arkady A Drovosekov <drawa@suct.uu.ru> wrote: > On Thu, 23 Jan 2003 20:05:33 +0500, Evgenij M Baldin <baldin@Slon.inp.nsk.su> > wrote: P.S. У меня проблема с datetime которая в запросах типа where [время] > > '23 Jun 2002' смотреть на индексы отказывается. Это очень сильно тормозит на > таблица в несколько десятков тысяч записей. Придётся переходить на int, > наверное, чёрт с ней - c проблемой 2032 года :( [время] > '23 Jun 2002 0:0:0' > не поможет? Без разницы :( Более того: вот два эквивалентных запроса: Требуется найти ближайшее время, которое меньше заданного: Запрос с сортировкой calibrations=> EXPLAIN select begintime from vepp4term where begintime<'23 Feb 2002' order by begintime desc limit 1; NOTICE: QUERY PLAN: Limit (cost=0.00..0.09 rows=1 width=8) -> Index Scan Backward using vepp4term_btime_index on vepp4term -> (cost=0.00..1910.88 rows=20185 width=8) EXPLAIN Запрос с агрегатной функцией calibrations=> EXPLAIN select max(begintime) from vepp4term where begintime<'23 Feb 2002'; NOTICE: QUERY PLAN: Aggregate (cost=679.02..679.02 rows=1 width=8) -> Seq Scan on vepp4term (cost=0.00..628.56 rows=20185 width=8) EXPLAIN Почему во втором случае seq scan? Может быть мне какой букварь почитать? Буду премного благодарен за ссылку. Если же сказать: calibrations=> EXPLAIN select min(begintime) from vepp4term where begintime>'23 Feb 2002'; NOTICE: QUERY PLAN: Aggregate (cost=21.44..21.44 rows=1 width=8) -> Index Scan using vepp4term_btime_index on vepp4term (cost=0.00..21.39 -> rows=20 width=8) То есть искать ближайшее время болше заданного, то идёт Index Scan Может быть это глюк какой? Это всё верно для версии 7.1, в версии 7.3 explaine возвращает всегда seq scan. calibrations=> EXPLAIN select min(begintime) from vepp4term where begintime>'23 calibrations'> Feb 2002'; QUERY PLAN -------------------------------------------------------------------------------- -- Aggregate (cost=625.40..625.40 rows=1 width=8) -> Seq Scan on vepp4term (cost=0.00..608.56 rows=6735 width=8) Filter: (begintime > '2002-02-23 00:00:00+06'::timestamp with time zone) (3 rows) В таблицу писались с данные с интервалом примерно в 5 минут. С уважением Евгений P.S. Очевидное - невероятное. -- Budker Institute of Nuclear Physics e-mail: E.M.Baldin@inp.nsk.su WWW: http://www.inp.nsk.su/~baldin --- ifmail v.2.15dev5 * Origin: BINP, Novosibirsk, Russia (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/8843e04e5af2.html, оценка из 5, голосов 10
|