Обсуждение: Speeding query
Hi!
I have 2 tables
\d table1
Column | Type
----------------+--------------------------
id_entry | integer
created | timestamp with time zone
title | character varying(64)
description | text
Primary key: table1_pk
Index "table1_pk"
Column | Type
----------+---------
id_entry | integer
unique btree (primary key)
\d table2
Column | Type
-------------+-----------------------
id_category | character varying(64)
id_entry | character varying(64)
Primary key: table2_pk
\d table2_pk
Column | Type
-------------+-----------------------
id_category | character varying(64)
id_entry | character varying(64)
unique btree (primary key)
Not i have query like this
select d.title from table1 d, table2 c where c.id_category='09' and d.id_entry=c.id_entry;
This is query plan
NOTICE: QUERY PLAN:
Nested Loop (cost=0.00..154844.08 rows=96 width=36)
-> Seq Scan on table1 d (cost=0.00..2957.36 rows=25236 width=28)
-> Index Scan using table1_pk on table2 c (cost=0.00..6.00 rows=1 width=8)
I see that there is seq scan over 25k rows, how can i set
indexes to make query faster and use indexes.
--
lp,
Uros mailto:uros.gruber@sir-mag.com
On Wed, 2002-04-24 at 16:54, Uros Gruber wrote: > > select d.title from table1 d, table2 c where c.id_category='09' and d.id_entry=c.id_entry; > > > I see that there is seq scan over 25k rows, how can i set > indexes to make query faster and use indexes. > try setting an index on table2's id_entry. your index on table2 is a compound index with id_entry as the second field; so no indexes match just table2's id_entry. -- Tom Jenkins Development InfoStructure http://www.devis.com
Someone needed to add a serial type to a table. Here's the quick dirty,
lazy dba way:
say table t1 has a structure like so:
create table t1 (field1 text, id int);
and data in it, and we want id to be a serial (autoincrementing etc...)
field.
do this:
create table t2 (field1 text, id serial);
Now, assuming that all the data in t1 has a unique id, we can just do
this:
insert into t2 (select * from t1);
and voila, our table is populated. One small problem, the current value
of the associate sequence is still set to the original number (1 I think).
So, we do this:
select setval('t2_id_seq',(select max(id) from t2));
And now we have our sequence ready to go.
Good luck!