powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / индекс на TIMESTAMPTZ и оператор < (меньше)
2 сообщений из 2, страница 1 из 1
индекс на TIMESTAMPTZ и оператор < (меньше)
    #38706034
kkv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хочу чистить большую таблицу примерно так
Код: sql
1.
delete from big_table where date_create<now()-interval '3 day'



создал индекс
Код: sql
1.
2.
3.
4.
CREATE INDEX big_table_idx1
  ON big_table 
  USING btree
  (date_create);



но
Код: sql
1.
2.
explain analyze
select count(1) from big_table where date_create<now()-interval '3 day'


выдало вот такое время

Код: plaintext
1.
2.
3.
Aggregate  (cost=844019.38..844019.39 rows=1 width=0) (actual time=39854.121..39854.121 rows=1 loops=1)
  ->  Seq Scan on big_table (cost=0.00..784462.93 rows=23822579 width=0) (actual time=22017.948..39852.223 rows=8211 loops=1)
        Filter: (date_create< (now() - '3 days'::interval))
Total runtime: 39854.158 ms

т.е. индекс не сработал на оператор < (меньше)
а вот на равенство работает отлично.

как быть?
...
Рейтинг: 0 / 0
индекс на TIMESTAMPTZ и оператор < (меньше)
    #38706059
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kkv79хочу чистить большую таблицу примерно так
Код: sql
1.
delete from big_table where date_create<now()-interval '3 day'



создал индекс
Код: sql
1.
2.
3.
4.
CREATE INDEX big_table_idx1
  ON big_table 
  USING btree
  (date_create);



но
Код: sql
1.
2.
explain analyze
select count(1) from big_table where date_create<now()-interval '3 day'


выдало вот такое время

Код: plaintext
1.
2.
3.
Aggregate  (cost=844019.38..844019.39 rows=1 width=0) (actual time=39854.121..39854.121 rows=1 loops=1)
  ->  Seq Scan on big_table (cost=0.00..784462.93 rows=23822579 width=0) (actual time=22017.948..39852.223 rows=8211 loops=1)
        Filter: (date_create< (now() - '3 days'::interval))
Total runtime: 39854.158 ms

т.е. индекс не сработал на оператор < (меньше)
а вот на равенство работает отлично.

как быть?

а с чего бы ему срабатывать?
SEQ SCAN если запрос дергает больше 10% строк - всегда быстрее чем index scan
а база считает что у вас под условие попадает 23822579 строк...

попробуйте analyze big_table; сделать для начала
странно что настолько реальность и то что база считает различаются...
autovacuum у вас чтоли отключен или не успевает?

--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / индекс на TIMESTAMPTZ и оператор < (меньше)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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