Choosing between seqscan and bitmap scan
От | Teodor Sigaev |
---|---|
Тема | Choosing between seqscan and bitmap scan |
Дата | |
Msg-id | 4BD9527A.60905@sigaev.ru обсуждение исходный текст |
Ответы |
Re: Choosing between seqscan and bitmap scan
Re: Choosing between seqscan and bitmap scan |
Список | pgsql-hackers |
Hi! There is some strange on current CVS with correct choosing of scans. Although bitmap scan is cheaper but postgresql chooses seqscan. Test suite: CREATE OR REPLACE FUNCTION genvect() RETURNS tsvector AS $$ SELECT array_to_string( ARRAY( SELECT (random()*random()*random()*1000.0)::int::text FROM generate_series(1, 10 + (100.0*random())::bigint) ), ' ' )::tsvector; $$ LANGUAGE SQL VOLATILE; SELECT t::int4 AS id, genvect() AS ts INTO foo FROM generate_series(1, 100000) AS t; CREATE INDEX foo_idx ON foo USING gin (ts); VACCUM ANALYZE foo; postgres=# explain select count(*) from foo where ts @@ '259'; QUERY PLAN --------------------------------------------------------------- Aggregate (cost=5817.27..5817.28 rows=1 width=0) -> SeqScan on foo (cost=0.00..5805.00 rows=4907 width=0) Filter: (ts @@ '''259'''::tsquery) (3 rows) Time: 6,370 ms postgres=# set enable_seqscan = off; SET Time: 2,014 ms postgres=# explain select count(*) from foo where ts @@ '259'; QUERY PLAN --------------------------------------------------------------------------------- Aggregate (cost=5767.35..5767.36 rows=1width=0) -> Bitmap Heap Scan on foo (cost=942.46..5755.08 rows=4907 width=0) Recheck Cond: (ts @@ '''259'''::tsquery) -> Bitmap Index Scan on foo_idx (cost=0.00..941.24 rows=4907 width=0) Index Cond:(ts @@ '''259'''::tsquery) (5 rows) Why does pgsql choose seqscan (5817.28) instead of bitmap one (5767.36)? Changed options in postgresql.conf: shared_buffers=128MB temp_buffers=16MB work_mem=16MB maintenance_work_mem=256MB effective_cache_size=1024MB -- Teodor Sigaev E-mail: teodor@sigaev.ru WWW: http://www.sigaev.ru/
В списке pgsql-hackers по дате отправления: