URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5239
[ Назад ]

Исходное сообщение
"Оптимизация запроса к большой БД"

Отправлено mxl , 15-Мрт-06 13:46 
Помогите оптимизировать запрос.В процессе работы вместо 192.168.128.160 подставляются адреса из net_addr. Может подскажете как написать функцию,чтобы это реализовать.
EXPLAIN ANALYZE SELECT sum(bytes/1024/1024),to_char(date_trunc('day',second),'DD') FROM iptables,net_addr WHERE ((net_addr.ip=iptables.source)) and second BETWEEN '2006-03-01' and '2006-04-01' and iptables.source='192.168.128.160' ::inet GROUP BY to_char(date_trunc('day',second),'DD') ORDER BY to_char(date_trunc('day',second),'DD');
QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GroupAggregate (cost=8.83..8.86 rows=1 width=16) (actual time=1337.567..1338.681 rows=14 loops=1)
-> Sort (cost=8.83..8.83 rows=2 width=16) (actual time=1337.462..1337.671 rows=335 loops=1)
Sort Key: to_char(date_trunc('day'::text, iptables."second"), 'DD'::text)
-> Nested Loop (cost=0.00..8.82 rows=2 width=16) (actual time=3.760..1335.681 rows=335 loops=1)
-> Index Scan using idx_second on iptables (cost=0.00..3.02 rows=1 width=27) (actual time=3.655..1318.899 rows=335 loops=1)
Index Cond: (("second" >= '2006-03-01 00:00:00'::timestamp without time zone) AND ("second" <= '2006-04-01 00:00:00'::timestamp without time zone))
Filter: (source = '192.168.128.163'::inet)
-> Index Scan using idx_net_ip on net_addr (cost=0.00..5.77 rows=2 width=11) (actual time=0.019..0.021 rows=1 loops=335)
Index Cond: ('192.168.128.163'::inet = ip)
Total runtime: 1338.831 ms
(10 rows)

\d iptables
Table "public.iptables"
Column | Type | Modifiers
-------------+-----------------------------+------------------------------------------------------------
id_iptables | integer | not null default nextval('iptables_id_iptables_seq'::text)
bytes | double precision |
prot | text |
source | inet |
dest | inet |
second | timestamp without time zone |
first | timestamp without time zone |
Indexes:
"iptables_pkey" primary key, btree (id_iptables)
"idx_first" btree ("first")
"idx_ipt_dest" btree (dest)
"idx_ipt_src" btree (source)
"idx_second" btree ("second")

\d net_addr
Table "public.net_addr"
Column | Type | Modifiers
----------------+---------+------------------------------------------------------------
id_net_addr | integer | not null default nextval('net_addr_id_net_addr_seq'::text)
id | integer | not null
id_uzl | integer |
ip | inet | not null
gw | inet |
mac | macaddr |
addr_rasp | integer |
kv_rasp | text |
addr_d_cl_rasp | integer |
Indexes:
"idx_id_net_addr" btree (id)
"idx_net_ip" btree (ip)


При формировании сводной таблицы (ip подставляются из таблицы net_addr) работает очень медленно.


Содержание

Сообщения в этом обсуждении
"Оптимизация запроса к большой БД"
Отправлено co6aka , 21-Мрт-06 01:58 
Эт конечно очень позитивно... но может скажете что за БД и версию?

"Оптимизация запроса к большой БД"
Отправлено mxl , 21-Мрт-06 07:26 
>Эт конечно очень позитивно... но может скажете что за БД и версию?
>
PostgreSQL 7.4.3 on i586-alt-linux-gnu, compiled by GCC i586-alt-linux-gcc (GCC) 3.3.3 20040412 (ALT Linux, build 3.3.3-alt5)