Обсуждение: ways to force index use?
Hello,
Thanks to all the previous suggestions for my previous question. I've
done a lot more research and playing around since then, and luckily I
think I have a better understanding of postgresql.
I still have some queries that don't use an index, and I was wondering
if there were some other tricks to try out?
My system: RH9, PG 7.3.4, IDE, 1 gig RAM, celeron 1.7
My Table Columns (all bigints): start, stop, step1, step2, step3
My Indexes: btree(start), btree(stop), btree(start, stop)
Size of table: 16212 rows
Params: shared_buffers = 128, effective_cache_size = 8192
The Query: explain analyze select * from path where start = 653873 or
start = 649967 or stop = 653873 or stop = 649967
The Result:
Seq Scan on "path" (cost=0.00..450.22 rows=878 width=48) (actual time=0
.08..40.50 rows=1562 loops=1)
Filter: (("start" = 653873) OR ("start" = 649967) OR (stop = 653873) OR
(stop = 649967))
Total runtime: 42.41 msec
Does anyone have a suggestion on how to get that query to use an index?
Is it even possible? I did run vacuum analyze right before this test.
I'm only beginning to customize the parameters in postgresql.conf
(mainly from tips from this list).
Thanks very much!
Seth
Seth, > The Query: explain analyze select * from path where start = 653873 or > start = 649967 or stop = 653873 or stop = 649967 you need to cast all those numbers to BIGINT: select * from path where start = 653873::BIGINT or start = 649967::BIGINT or stop = 653873::BIGINT or stop = 649967::BIGINT Then an index on start or stop should be used by the planner. -- -Josh Berkus Aglio Database Solutions San Francisco
Seth Ladd <seth@picklematrix.net> writes:
> My Table Columns (all bigints): start, stop, step1, step2, step3
^^^^^^^^^^^
> The Query: explain analyze select * from path where start = 653873 or
> start = 649967 or stop = 653873 or stop = 649967
> Does anyone have a suggestion on how to get that query to use an index?
Coerce the constants to bigint, for starters. However, a query that is
selecting almost 10% of the table, as your example is, probably
*shouldn't* be using an index.
regards, tom lane
On Monday, Oct 13, 2003, at 21:24 Pacific/Honolulu, mila wrote: > Seth, > >> My system: RH9, PG 7.3.4, IDE, 1 gig RAM, celeron 1.7 > ... >> Size of table: 16212 rows >> Params: shared_buffers = 128, effective_cache_size = 8192 > > Just in case, > the "shared_buffers" value looks a bit far too small for your system. > I think you should raise it to at least 1024, or so. > > Effective cache size could be (at least) doubled, too ==> this might > help forcing the index use. Thanks! I'm just beginning to play with these numbers. I'll definitely try them out. I can't wait to try out the script that will help set these parameters! :) Seth