powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / не работает поиск по индексу =(((
5 сообщений из 5, страница 1 из 1
не работает поиск по индексу =(((
    #35079178
vladimir1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, подскажите плиз:

Есть у меня таблица с полем otime:: (time without timezone.)
На это поле сделан индекс btree.

Вот такой запрос работает замечательно:
select qqq from mytable where otime<'12:00:00';
Если сделать explain - ищет по индексу отлично.

А вот такой запрос:
select sum(qqq) from mytable where otime<'12:00:00';
Уже работает крайне медленно =((( Т.к. индекс почему-то не использует, а использует фильтр...

Почему так, подскажите плиз? PG 8.2/win32.

Спасибо!
...
Рейтинг: 0 / 0
не работает поиск по индексу =(((
    #35079374
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
покажите explain analyze для обоих запросов
...
Рейтинг: 0 / 0
не работает поиск по индексу =(((
    #35080085
vladimir1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я перегенерировал индекс, вроде стало нормально, однако есть другая проблема...
Вот запросы и эксплейн к ним. Почему второй запрос работает по индексу, а первый нет?

1. explain analyze select sum(price) from mytable where odate=current_date and otime<current_time;

Aggregate (cost=8150.70..8150.71 rows=1 width=4) (actual time=455.202..455.203 rows=1 loops=1)
-> Bitmap Heap Scan on mytable (cost=1418.45..8099.48 rows=20489 width=4) (actual time=10.576..352.551 rows=82404 loops=1)
Recheck Cond: (odate = ('now'::text)::date)
Filter: ((otime)::time with time zone < ('now'::text)::time with time zone)
-> Bitmap Index Scan on idx_otime (cost=0.00..1413.32 rows=61468 width=0) (actual time=10.364..10.364 rows=82404 loops=1)
Index Cond: (odate = ('now'::text)::date)
Total runtime: 455.270 ms

2. explain analyze select sum(price) from mytable where odate=current_date and otime<'22:00';

Aggregate (cost=8109.54..8109.55 rows=1 width=4) (actual time=217.203..217.204 rows=1 loops=1)
-> Bitmap Heap Scan on mytable (cost=1582.30..7955.88 rows=61462 width=4) (actual time=12.223..111.274 rows=82404 loops=1)
Recheck Cond: ((odate = ('now'::text)::date) AND (otime < '22:00:00'::time without time zone))
-> Bitmap Index Scan on idx_otime (cost=0.00..1566.93 rows=61462 width=0) (actual time=12.030..12.030 rows=82404 loops=1)
Index Cond: ((odate = ('now'::text)::date) AND (otime < '22:00:00'::time without time zone))
Total runtime: 217.272 ms
...
Рейтинг: 0 / 0
не работает поиск по индексу =(((
    #35080121
vladimir1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно, только что нашел решение. Но кривоватое 8-)

select sum(price) from mytable where odate=current_date and otime<(select current_time::time);

Странно, почему без доп. селекта не работает..
...
Рейтинг: 0 / 0
не работает поиск по индексу =(((
    #35081030
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vladimir1024Собственно, только что нашел решение. Но кривоватое 8-)

select sum(price) from mytable where odate=current_date and otime<(select current_time::time);

Странно, почему без доп. селекта не работает..попробуйте без дополнительного подзапроса просто явное приведение типа

select sum(price) from mytable where odate=current_date and otime<current_time::time;
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / не работает поиск по индексу =(((
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]