How does Index Scan get used

Started by Samuel J. Sutjionoabout 24 years ago7 messagesgeneral
Jump to latest
#1Samuel J. Sutjiono
ssutjiono@wc-group.com

I tried an Index Scan but I kept on getting Seq Scan. Do you know why ? What do I need to do to get my query to use index scan (I tried to turn it on by doing SET ENABLE_indexscan = on; but it didn't work)

create table test (test_col text);
create index test_index on test (test_col);
insert into test values ('abc.xyz');
insert into test values ('abcxyz');
insert into test values ('abc/xyz');

explain select * from test where test_col like 'abc/%';

NOTICE: QUERY PLAN:

Seq Scan on test (cost=0.00..22.50 rows=10 width=12)

Another question:
Does Regex (~*) or like use table scan ?

Thanks,
Sam

#2Holger Marzen
holger@marzen.de
In reply to: Samuel J. Sutjiono (#1)
Re: How does Index Scan get used

On Fri, 22 Feb 2002, Samuel J. Sutjiono wrote:

I tried an Index Scan but I kept on getting Seq Scan. Do you know why ? What do I need to do to get my query to use index scan (I tried to turn it on by doing SET ENABLE_indexscan = on; but it didn't work)

create table test (test_col text);
create index test_index on test (test_col);
insert into test values ('abc.xyz');
insert into test values ('abcxyz');
insert into test values ('abc/xyz');

explain select * from test where test_col like 'abc/%';

NOTICE: QUERY PLAN:

Seq Scan on test (cost=0.00..22.50 rows=10 width=12)

Did you do a vacuum analyze after creating the index?

#3Samuel J. Sutjiono
ssutjiono@wc-group.com
In reply to: Holger Marzen (#2)
Re: How does Index Scan get used

No, I didn't.

----- Original Message -----
From: "Holger Marzen" <holger@marzen.de>
To: "Samuel J. Sutjiono" <ssutjiono@wc-group.com>
Cc: <pgsql-general@postgresql.org>
Sent: Friday, February 22, 2002 10:25 AM
Subject: Re: [GENERAL] How does Index Scan get used

On Fri, 22 Feb 2002, Samuel J. Sutjiono wrote:

I tried an Index Scan but I kept on getting Seq Scan. Do you know why ?

What do I need to do to get my query to use index scan (I tried to turn it
on by doing SET ENABLE_indexscan = on; but it didn't work)

Show quoted text

create table test (test_col text);
create index test_index on test (test_col);
insert into test values ('abc.xyz');
insert into test values ('abcxyz');
insert into test values ('abc/xyz');

explain select * from test where test_col like 'abc/%';

NOTICE: QUERY PLAN:

Seq Scan on test (cost=0.00..22.50 rows=10 width=12)

Did you do a vacuum analyze after creating the index?

#4Luis Alberto Amigo Navarro
lamigo@atc.unican.es
In reply to: Holger Marzen (#2)
Re: How does Index Scan get used

create table test (test_col text);
create index test_index on test (test_col);
insert into test values ('abc.xyz');
insert into test values ('abcxyz');
insert into test values ('abc/xyz');

First of all when you create an index u must specify what kind of ops will use
that index, in this case create index test_index on test (test_col , text_ops)

Second, a index only will be used if there is an advantage on using it, in
this case, u have 3 unique values, unless random-page cost is lower than 3,
planner would not use it.
Third of all, if u want to learn how to use indexes, try numeric values first,
because indexing texts is a bit more difficult.

#5Tom Lane
tgl@sss.pgh.pa.us
In reply to: Samuel J. Sutjiono (#1)
Re: How does Index Scan get used

"Samuel J. Sutjiono" <ssutjiono@wc-group.com> writes:

create table test (test_col text);
create index test_index on test (test_col);
insert into test values ('abc.xyz');
insert into test values ('abcxyz');
insert into test values ('abc/xyz');

explain select * from test where test_col like 'abc/%';

NOTICE: QUERY PLAN:

Seq Scan on test (cost=3D0.00..22.50 rows=3D10 width=3D12)

I did the above and got:

regression=# explain select * from test where test_col like 'abc/%';
NOTICE: QUERY PLAN:

Index Scan using test_index on test (cost=0.00..17.07 rows=5 width=32)

Perhaps you are using a locale that prevents LIKE from being optimized
into an indexscan? See
http://www.ca.postgresql.org/users-lounge/docs/7.2/postgres/charset.html#AEN16601

regards, tom lane

#6Holger Marzen
holger@marzen.de
In reply to: Samuel J. Sutjiono (#3)
Re: How does Index Scan get used

On Fri, 22 Feb 2002, Samuel J. Sutjiono wrote:

[Please answer below cited parts.]

No, I didn't.

----- Original Message -----
From: "Holger Marzen" <holger@marzen.de>
To: "Samuel J. Sutjiono" <ssutjiono@wc-group.com>
Cc: <pgsql-general@postgresql.org>
Sent: Friday, February 22, 2002 10:25 AM
Subject: Re: [GENERAL] How does Index Scan get used

On Fri, 22 Feb 2002, Samuel J. Sutjiono wrote:

I tried an Index Scan but I kept on getting Seq Scan. Do you know why ?

What do I need to do to get my query to use index scan (I tried to turn it
on by doing SET ENABLE_indexscan = on; but it didn't work)

explain select * from test where test_col like 'abc/%';

NOTICE: QUERY PLAN:

Seq Scan on test (cost=0.00..22.50 rows=10 width=12)

Did you do a vacuum analyze after creating the index?

If you don't do a "vacuum analyze" for a table after creating an index
then Postgres has not all the informations to optimize a query. "vaccum
analyze" is recommended on a regular basis. I do it every night.

--
PGP/GPG Key-ID:
http://blackhole.pca.dfn.de:11371/pks/lookup?op=get&amp;search=0xB5A1AFE1

#7Samuel J. Sutjiono
ssutjiono@wc-group.com
In reply to: Samuel J. Sutjiono (#1)
Re: How does Index Scan get used

Tom,

I still haven't been able to use index scan on my LIKE query.

- I am using BTREE index. Am I supposed to use RTREE for LIKE to use index ?
- I am not using a locale.

Please let me know what other settings(parameters) that I need to check to
make the query optimizer use Index Scan.
I would really appreciate your help.

Best Regards,
Sam

----- Original Message -----
From: "Tom Lane" <tgl@sss.pgh.pa.us>
To: "Samuel J. Sutjiono" <ssutjiono@wc-group.com>
Cc: <pgsql-general@postgresql.org>
Sent: Friday, February 22, 2002 12:58 PM
Subject: Re: [GENERAL] How does Index Scan get used

"Samuel J. Sutjiono" <ssutjiono@wc-group.com> writes:

create table test (test_col text);
create index test_index on test (test_col);
insert into test values ('abc.xyz');
insert into test values ('abcxyz');
insert into test values ('abc/xyz');

explain select * from test where test_col like 'abc/%';

NOTICE: QUERY PLAN:

Seq Scan on test (cost=3D0.00..22.50 rows=3D10 width=3D12)

I did the above and got:

regression=# explain select * from test where test_col like 'abc/%';
NOTICE: QUERY PLAN:

Index Scan using test_index on test (cost=0.00..17.07 rows=5 width=32)

Perhaps you are using a locale that prevents LIKE from being optimized
into an indexscan? See

http://www.ca.postgresql.org/users-lounge/docs/7.2/postgres/charset.html#AEN
16601

Show quoted text

regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org