Тюнинг.

Alex Kab
Дата: 14.07.2004 10:30:25
Добрый день.
Есть PostgreSQL Server 7.4.2, работает на FreeBSD 5.2.1
Есть табличка sq_logfile


Table "public.sq_logfile"
Column | Type | Modifiers
------------------+-----------------------------+------------------------------------------------------------
id | bigint | not null default nextval('public.sq_logfile_id_seq'::text)
tstime | timestamp without time zone |
duration | integer |
client_addr_id | integer | not null default 0
resultcode_id | integer | not null default 0
requestsize | integer |
requestmethod_id | integer | not null default 0
url | text |
username_id | integer | not null default 0
hierarchycode_id | integer | not null default 0
contenttype_id | integer | not null default 0
Indexes:
"sq_logfile_pkey" primary key, btree (id)
"idx_sq_logfile1" btree (tstime)
"idx_sq_logfile2" btree (client_addr_id)
"idx_sq_logfile3" btree (username_id)
"idx_sq_logfile4" btree (url)
"idx_sq_logfile5" btree (tstime, url, username_id)
Foreign-key constraints:
"$1" FOREIGN KEY (client_addr_id) REFERENCES sq_clientaddr(id)
"$2" FOREIGN KEY (resultcode_id) REFERENCES sq_resultcodes(id)
"$3" FOREIGN KEY (requestmethod_id) REFERENCES sq_requestmethods(id)
"$4" FOREIGN KEY (username_id) REFERENCES sq_username(id)
"$5" FOREIGN KEY (hierarchycode_id) REFERENCES sq_hierarchycodes(id)
"$6" FOREIGN KEY (contenttype_id) REFERENCES sq_contenttypes(id)

В табличке 2,6 млн записей. Почему по инджексированному полю (id, к примеру)
такие жуткие тормоза. Запрос SELECT id FROM sq_logfile WHERE id=123 отрабатывает 18 секунд. И это по ключевому полю.
VACUUM FULL делал.

squid=# EXPLAIN SELECT id FROM sq_logfile WHERE id=123;
QUERY PLAN
--------------------------------------------------------------
Seq Scan on sq_logfile (cost=0.00..69490.30 rows=1 width=8)
Filter: (id = 123)
(2 rows)

какие-нибудь мысли по оптимизации?
LeXa NalBat
Дата: 14.07.2004 10:43:31
where id = 123::bigint
Alex Kab
Дата: 14.07.2004 10:54:30
LeXa NalBat
where id = 123::bigint


Не совсем понял.
squid=# SELECT FROM sq_logfile where id = 123::bigint;
ERROR: syntax error at or near "FROM" at character 8
squid=#

Даже если это и так, это в каждом запросе для того чтобы юзался индекс нужно ручками указывать?
LeXa NalBat
Дата: 14.07.2004 11:05:08
автор
ERROR: syntax error at or near "FROM" at character 8


Вы не указали поля в select: select * from

автор
Даже если это и так, это в каждом запросе для того чтобы юзался индекс нужно ручками указывать?


Для "нестандартных" типов (например bigint) я иного способа не знаю.
Alex Kab
Дата: 14.07.2004 11:16:27
автор

Вы не указали поля в select: select * from


Сорри, руки :-)

автор

Для "нестандартных" типов (например bigint) я иного способа не знаю.


Ок. Большое сасибо !!!
nevermind
Дата: 15.07.2004 11:27:53
В моей версии:

version
---------------------------------------------------------------------
PostgreSQL 7.4.2 on i386-portbld-freebsd4.8, compiled by GCC 2.95.4

это еще не пофиксено, НО:

Actually, this has already been fixed in CVS HEAD (as I mentioned in this thread yesterday). To wit:

nconway=# create table t1 (a int8);
CREATE TABLE
nconway=# create index t1_a_idx on t1 (a);
CREATE INDEX
nconway=# explain select * from t1 where a = 5;
QUERY PLAN
--------------------------------------------------------------------
Index Scan using t1_a_idx on t1 (cost=0.00..17.07 rows=5 width=8)
Index Cond: (a = 5)
(2 rows)
nconway=# select version();
version
------------------------------------------------------------------------------------
PostgreSQL 7.5devel on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.3.3 (Debian)
(1 row)

-Neil


а вообще почитай вот здесь: [url=http://]http://archives.postgresql.org/pgsql-performance/2004-03/msg00098.php[/url]