powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Использование индекса в партицированных таблицах
3 сообщений из 3, страница 1 из 1
Использование индекса в партицированных таблицах
    #34676132
postt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть партицированная по дате таблица. Делаю к ней запрос
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
EXPLAIN ANALYZE SELECT max(date_hour) FROM traffic_hour;
                                                                         QUERY PLAN                                                          
-------------------------------------------------------------------------------------------------------------------------------------------------------------
 Aggregate  (cost= 249755 . 60 .. 249755 . 61  rows= 1  width= 8 ) (actual time= 18319 . 823 .. 18319 . 823  rows= 1  loops= 1 )
   ->  Append  (cost= 0 . 00 .. 225257 . 28  rows= 9799328  width= 8 ) (actual time= 3643 . 432 .. 18084 . 677  rows= 531803  loops= 1 )
         ->  Seq Scan on traffic_hour  (cost= 0 . 00 .. 17 . 70  rows= 770  width= 8 ) (actual time= 0 . 002 .. 0 . 002  rows= 0  loops= 1 )
         ->  Seq Scan on traffic_hour_2007_07 traffic_hour  (cost= 0 . 00 .. 97111 . 05  rows= 4224605  width= 8 ) (actual time= 3643 . 429 .. 7703 . 089  rows= 359603  loops= 1 )
         ->  Seq Scan on traffic_hour_2007_08 traffic_hour  (cost= 0 . 00 .. 127933 . 83  rows= 5565483  width= 8 ) (actual time= 355 . 822 .. 10141 . 462  rows= 172200  loops= 1 )
         ->  Seq Scan on traffic_hour_2007_09 traffic_hour  (cost= 0 . 00 .. 17 . 70  rows= 770  width= 8 ) (actual time= 0 . 002 .. 0 . 002  rows= 0  loops= 1 )
         ->  Seq Scan on traffic_hour_2007_10 traffic_hour  (cost= 0 . 00 .. 17 . 70  rows= 770  width= 8 ) (actual time= 0 . 001 .. 0 . 001  rows= 0  loops= 1 )
         ->  Seq Scan on traffic_hour_2007_11 traffic_hour  (cost= 0 . 00 .. 17 . 70  rows= 770  width= 8 ) (actual time= 0 . 001 .. 0 . 001  rows= 0  loops= 1 )
         ->  Seq Scan on traffic_hour_2007_12 traffic_hour  (cost= 0 . 00 .. 17 . 70  rows= 770  width= 8 ) (actual time= 0 . 000 .. 0 . 000  rows= 0  loops= 1 )
         ->  Seq Scan on traffic_hour_2008_01 traffic_hour  (cost= 0 . 00 .. 17 . 70  rows= 770  width= 8 ) (actual time= 0 . 001 .. 0 . 001  rows= 0  loops= 1 )
         ->  Seq Scan on traffic_hour_2008_02 traffic_hour  (cost= 0 . 00 .. 17 . 70  rows= 770  width= 8 ) (actual time= 0 . 001 .. 0 . 001  rows= 0  loops= 1 )
         ->  Seq Scan on traffic_hour_2008_03 traffic_hour  (cost= 0 . 00 .. 17 . 70  rows= 770  width= 8 ) (actual time= 0 . 001 .. 0 . 001  rows= 0  loops= 1 )
         ->  Seq Scan on traffic_hour_2008_04 traffic_hour  (cost= 0 . 00 .. 17 . 70  rows= 770  width= 8 ) (actual time= 0 . 001 .. 0 . 001  rows= 0  loops= 1 )
         ->  Seq Scan on traffic_hour_2008_05 traffic_hour  (cost= 0 . 00 .. 17 . 70  rows= 770  width= 8 ) (actual time= 0 . 001 .. 0 . 001  rows= 0  loops= 1 )
         ->  Seq Scan on traffic_hour_2008_06 traffic_hour  (cost= 0 . 00 .. 17 . 70  rows= 770  width= 8 ) (actual time= 0 . 001 .. 0 . 001  rows= 0  loops= 1 )
         ->  Seq Scan on traffic_hour_2008_07 traffic_hour  (cost= 0 . 00 .. 17 . 70  rows= 770  width= 8 ) (actual time= 0 . 001 .. 0 . 001  rows= 0  loops= 1 )
 Total runtime:  18319 . 918  ms

Индескы не используются. Если делаю запрос непосредственно к партиции, то индекс задействован.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
EXPLAIN ANALYZE SELECT max(date_hour) FROM traffic.traffic_hour_2007_08;
                                                                                    QUERY PLAN                                               
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Result  (cost= 3 . 35 .. 3 . 36  rows= 1  width= 0 ) (actual time= 6 . 999 .. 6 . 999  rows= 1  loops= 1 )
   InitPlan
     ->  Limit  (cost= 0 . 00 .. 3 . 35  rows= 1  width= 8 ) (actual time= 6 . 992 .. 6 . 992  rows= 1  loops= 1 )
           ->  Index Scan Backward using idx_traffic_hour_2007_08 on traffic_hour_2007_08  (cost= 0 . 00 .. 18671827 . 47  rows= 5565483  width= 8 ) (actual time= 6 . 989 .. 6 . 989  rows= 1  loops= 1 )
                 Filter: (date_hour IS NOT NULL)
 Total runtime:  7 . 036  ms
( 6  rows)
Так и должно быть? Если где-то есть ошибка-скажите, куда смотреть.
PS: Если это норма, то выигрыш от партицирования сводится к минимуму.
...
Рейтинг: 0 / 0
Использование индекса в партицированных таблицах
    #34676412
Dan Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотелось бы увидеть как минимум описание таблиц и индексов.

Код: plaintext
1.
----------------------------
 Verba volent, scripta manent 
...
Рейтинг: 0 / 0
Использование индекса в партицированных таблицах
    #34676456
postt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот структура таблиц. Все делалось по документации.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
\d traffic_hour
                                           Table "traffic_hour"
     Column      |            Type             |                             Modifiers
-----------------+-----------------------------+-------------------------------------------------------------------
 id_traffic_hour | bigint                      | not null default nextval(('id_traffic_hour_seq'::text)::regclass)
 bytes_in   | double precision            | not null default  0 
 bytes_out  | double precision            | not null default  0 
 date_hour       | timestamp without time zone | not null
 Indexes:
    "traffic_hour_pkey" PRIMARY KEY, btree (id_traffic_hour)
    "idx_traffic_hour_date_hour" btree (date_hour)
Rules:
    rule_traffic_hour_2007_07 AS
    ON INSERT TO traffic_hour
   WHERE new.date_hour >= '2007-07-01 00:00:00'::timestamp without time zone AND 
new.date_hour < '2007-08-01 00:00:00'::timestamp without time zone 
DO INSTEAD  INSERT INTO traffic_hour_2007_07 (id_traffic_hour, bytes_in, bytes_out, date_hour)
  VALUES (new.id_traffic_hour, new.bytes_in, new.bytes_out, new.date_hour)
    ...

\d traffic_hour_2007_07
                                       Table "traffic_hour_2007_07"
     Column      |            Type             |                             Modifiers
-----------------+-----------------------------+-------------------------------------------------------------------
 id_traffic_hour | bigint                      | not null default nextval(('id_traffic_hour_seq'::text)::regclass)
 bytes_in   | double precision            | not null default  0 
 bytes_out  | double precision            | not null default  0 
 date_hour       | timestamp without time zone | not null
 Indexes:
    "idx_traffic_hour_2007_07" btree (date_hour)
Check constraints:
    "traffic_hour_2007_07_date_hour_check" CHECK (date_hour >= '2007-07-01 00:00:00'::timestamp without time zone
AND date_hour < '2007-08-01 00:00:00'::timestamp without time zone)
Inherits: traffic_hour

...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Использование индекса в партицированных таблицах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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