Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / date_trunc / 3 сообщений из 3, страница 1 из 1
28.04.2006, 16:15
    #33698007
Tough
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
date_trunc
как ускорить запросы с использованием date_trunc?
Column | Type | Modifiers
-----------+-----------------------------+---------------
rule_name | character varying(32) | not null
bytes | bigint | not null
pkts | bigint | not null
that_time | integer | not null
hostname | character varying(25) |
time | timestamp without time zone | default now()
Indexes:
"logs_rule" btree (rule_name)
"logs_rule_time" btree (rule_name, "time")
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
ipac-ng=> EXPLAIN ANALYZE SELECT sum(bytes) FROM logs WHERE rule_name='vik' and "time"<date_trunc('month', DATE '2005-06-03');
                                                             QUERY PLAN                                                    
------------------------------------------------------------------------------------------------------------------------------------
 Aggregate  (cost= 30031 . 99 .. 30031 . 99  rows= 1  width= 8 ) (actual time= 1083 . 013 .. 1083 . 017  rows= 1  loops= 1 )
   ->  Index Scan using logs_rule on logs  (cost= 0 . 00 .. 30025 . 48  rows= 2602  width= 8 ) (actual time= 1080 . 539 .. 1082 . 732  rows= 42  loops= 1 )
         Index Cond: ((rule_name)::text = 'vik'::text)
         Filter: (("time")::timestamp with time zone < date_trunc('month'::text, ('2005-06-03'::date)::timestamp with time zone))
 Total runtime:  1083 . 093  ms
( 5  rows)

ipac-ng=> EXPLAIN ANALYZE SELECT sum(bytes) FROM logs WHERE rule_name='vik' and '2005-06-03'>"time";
                                                            QUERY PLAN                                                     
-----------------------------------------------------------------------------------------------------------------------------------
 Aggregate  (cost= 10063 . 77 .. 10063 . 77  rows= 1  width= 8 ) (actual time= 1 . 093 .. 1 . 097  rows= 1  loops= 1 )
   ->  Index Scan using logs_rule_time on logs  (cost= 0 . 00 .. 10057 . 26  rows= 2602  width= 8 ) (actual time= 0 . 192 .. 0 . 708  rows= 60  loops= 1 )
         Index Cond: (((rule_name)::text = 'vik'::text) AND ('2005-06-03 00:00:00'::timestamp without time zone > "time"))
 Total runtime:  1 . 167  ms
( 4  rows)
...
Рейтинг: 0 / 0
28.04.2006, 19:06
    #33698479
wbear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
date_trunc
всо просто

поле
time | timestamp without time zone
соответственно
Index Cond: (((rule_name)::text = 'vik'::text) AND ('2005-06-03 00:00:00'::timestamp without time zone > "time"))

а

date_trunc('month', DATE '2005-06-03') это
imestamp with time zone
поэтому и
Filter: (("time")::timestamp with time zone < date_trunc('month'::text, ('2005-06-03'::date)::timestamp with time zone))

( таже история что и с bigint ,т.е типами констант и использованием индексов)

попробуй так:
EXPLAIN ANALYZE SELECT sum(bytes) FROM logs WHERE rule_name='vik' and "time"<date_trunc('month', DATE '2005-06-03') ::timestamp without time zone ;
...
Рейтинг: 0 / 0
28.04.2006, 22:37
    #33698682
Tough
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
date_trunc
грамадное спасибо.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / date_trunc / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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