use of index - Mailing list pgsql-general
| From | Rafal Pietrak |
|---|---|
| Subject | use of index |
| Date | |
| Msg-id | 1154192390.23095.36.camel@model.home.waw.pl Whole thread Raw |
| In response to | Re: Performance of the listen command (Michael Fuhr <mike@fuhr.org>) |
| Responses |
Re: use of index
|
| List | pgsql-general |
Hi,
I've stapped over the following magic:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Table "public.users"
Column | Type |
Modifiers
----------+--------------+----------------------------------------------------
id | integer | not null default
nextval('users_id_seq'::regclass)
username | text | not null
firma | integer |
email | text |
state | character(1) |
Indexes:
"users_pkey" PRIMARY KEY, btree (id)
"users_username_key" UNIQUE, btree (username)
Foreign-key constraints:
"users_firma_fkey" FOREIGN KEY (firma) REFERENCES firmy(id)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Table "public.ludzie"
Column | Type |
Modifiers
----------+--------------+-----------------------------------------------------
id | integer | not null default
nextval('ludzie_id_seq'::regclass)
username | text | not null
firma | integer |
email | text |
state | character(1) |
Indexes:
"ludzie_pkey" PRIMARY KEY, btree (id)
"username_id_key" UNIQUE, btree (username)
Foreign-key constraints:
"$1" FOREIGN KEY (firma) REFERENCES firmy(id)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
INSERT INTO users SELECT * from ludzie;
INSERT 0 14
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
strop=# EXPLAIN ANALYZE SELECT * from users where username =
current_user;
QUERY
PLAN
---------------------------------------------------------------------------------------------------------------------------
Index Scan using users_username_key on users (cost=0.00..5.83 rows=1
width=80) (actual time=0.061..0.061 rows=0 loops=1)
Index Cond: (username = ("current_user"())::text)
Total runtime: 0.193 ms
(3 rows)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
EXPLAIN ANALYZE SELECT * from ludzie where username = current_user;
QUERY
PLAN
-------------------------------------------------------------------------------------------------
Seq Scan on ludzie (cost=0.00..1.19 rows=1 width=80) (actual
time=0.096..0.096 rows=0 loops=1)
Filter: (username = ("current_user"())::text)
Total runtime: 0.185 ms
(3 rows)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
As fak as I can tell, both TABLE users and TABLE ludzie are identical:
1. they have the same structure
2. they have the same contents (users was empty before INSERT)
Still, the query plan on them differs, and quite signifficantly - one
uses index, while the other doesn't.
Can someone shred some light on why is that so?
Note: I've created "TABLE users" after noticing, that "TABLE ludzie" is
Seq-scanned over username. But I'm not able to reproduce the seq-scan on
the freshly created table, which is *identical* to "TABLE ludzie". On
the other hand, I have REINDEXED the database, to no avail.
ludzie(username) is still seq-scanned.
Any ideas?
--
Rafal Pietrak <rafal@poczta.homelinux.com>
pgsql-general by date: