[BUGS] Bug #681: creating indices after data insertion

2002-05-29 Thread pgsql-bugs

Markus Grill ([EMAIL PROTECTED]) reports a bug with a severity of 2
The lower the number the more severe it is.

Short Description
creating indices after data insertion

Long Description
Hello,

in my opinion there is a big bug with indexes.
I used Postgresql 7.1.3 and 7.2.1

First I create two tables t_a and t_b with the fields t_a.id, t_a.bid and t_b.id where 
t_a.bid is a foreign key for t_b.id.
Then I insert many data records in the two tables.
After that I create one index i1 on t_a.id, one index i2 on t_a.bid and one index i3 
on t_b.id.

When I select over just one of the two tables (EXPLAIN SELECT * FROM t_a WHERE t_a.id 
= 'XXX';) then the query plan (and the query) uses index scans.

But when I select over the two tables with a join (EXPLAIN SELECT * FROM t_a, t_b 
WHERE t_aid = 'XXX' AND t_a_bid = t_b_id;) then the query plan uses slow seq scans 
(That's not OK)!

We tried another thing: 
First creating the tables, 
then creating the indexes 
and then inserting the data records:
In this case the query uses index scans (that's OK)!

We tried a third thing:
Creating the tables, creating the indexes, inserting the data records:
---> index scans (OK).
Then dropping the indexes and creating three new indexes:
---> seq scans (not OK).

Please do not say, I should create my indexes first, because this IS a bug.
That's a big problem when inserting many data records, because it's much faster to 
drop the index first, then inserting the data and then creating new indexes.

Please help! :-)

Sample Code
My real life examle:
The first example is the bug the second is the running one:

testrpr=# EXPLAIN SELECT * from inf_information, auct_sys_infogruppe where inf_alias = 
'asdfasdf' and infgrp_id = auct_sys_infogruppe.inf_id;
NOTICE:  QUERY PLAN:

Hash Join  (cost=5.95..8.86 rows=1 width=1070)
  ->  Seq Scan on auct_sys_infogruppe  (cost=0.00..2.61 rows=61 width=555)
  ->  Hash  (cost=5.94..5.94 rows=1 width=515)
->  Index Scan using xak1inf_information on inf_information  (cost=0.00..5.94 
rows=1 width=515)

NOTICE:  QUERY PLAN:

Hash Join  (cost=5.95..8.86 rows=1 width=1070)
  ->  Seq Scan on auct_sys_infogruppe  (cost=0.00..2.61 rows=61 width=555)
  ->  Hash  (cost=5.94..5.94 rows=1 width=515)
->  Index Scan using xak1inf_information on inf_information  (cost=0.00..5.94 
rows=1 width=515)

EXPLAIN

--

testrpr=# EXPLAIN SELECT * from inf_information, auct_sys_infogruppe where inf_alias = 
'asdfasdf' and infgrp_id = auct_sys_infogruppe.inf_id;
NOTICE:  QUERY PLAN:

Nested Loop  (cost=0.00..9.66 rows=1 width=1070)
  ->  Index Scan using xak1inf_information on inf_information  (cost=0.00..4.82 rows=1 
width=515)
  ->  Index Scan using xpkauct_sys_infogruppe on auct_sys_infogruppe  (cost=0.00..4.82 
rows=1 width=555)

NOTICE:  QUERY PLAN:

Nested Loop  (cost=0.00..9.66 rows=1 width=1070)
  ->  Index Scan using xak1inf_information on inf_information  (cost=0.00..4.82 rows=1 
width=515)
  ->  Index Scan using xpkauct_sys_infogruppe on auct_sys_infogruppe  (cost=0.00..4.82 
rows=1 width=555)

EXPLAIN

No file was uploaded with this report


---(end of broadcast)---
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])



Re: [BUGS] Bug #681: creating indices after data insertion

2002-05-29 Thread Dmitry Tkach

Did you vacuum it?

I hope, it helps...

Dima
[EMAIL PROTECTED] wrote:

>Markus Grill ([EMAIL PROTECTED]) reports a bug with a severity of 2
>The lower the number the more severe it is.
>
>Short Description
>creating indices after data insertion
>
>Long Description
>Hello,
>
>in my opinion there is a big bug with indexes.
>I used Postgresql 7.1.3 and 7.2.1
>
>First I create two tables t_a and t_b with the fields t_a.id, t_a.bid and t_b.id 
>where t_a.bid is a foreign key for t_b.id.
>Then I insert many data records in the two tables.
>After that I create one index i1 on t_a.id, one index i2 on t_a.bid and one index i3 
>on t_b.id.
>
>When I select over just one of the two tables (EXPLAIN SELECT * FROM t_a WHERE t_a.id 
>= 'XXX';) then the query plan (and the query) uses index scans.
>
>But when I select over the two tables with a join (EXPLAIN SELECT * FROM t_a, t_b 
>WHERE t_aid = 'XXX' AND t_a_bid = t_b_id;) then the query plan uses slow seq scans 
>(That's not OK)!
>
>We tried another thing: 
>First creating the tables, 
>then creating the indexes 
>and then inserting the data records:
>In this case the query uses index scans (that's OK)!
>
>We tried a third thing:
>Creating the tables, creating the indexes, inserting the data records:
>---> index scans (OK).
>Then dropping the indexes and creating three new indexes:
>---> seq scans (not OK).
>
>Please do not say, I should create my indexes first, because this IS a bug.
>That's a big problem when inserting many data records, because it's much faster to 
>drop the index first, then inserting the data and then creating new indexes.
>
>Please help! :-)
>
>Sample Code
>My real life examle:
>The first example is the bug the second is the running one:
>
>testrpr=# EXPLAIN SELECT * from inf_information, auct_sys_infogruppe where inf_alias 
>= 'asdfasdf' and infgrp_id = auct_sys_infogruppe.inf_id;
>NOTICE:  QUERY PLAN:
>
>Hash Join  (cost=5.95..8.86 rows=1 width=1070)
>  ->  Seq Scan on auct_sys_infogruppe  (cost=0.00..2.61 rows=61 width=555)
>  ->  Hash  (cost=5.94..5.94 rows=1 width=515)
>->  Index Scan using xak1inf_information on inf_information  (cost=0.00..5.94 
>rows=1 width=515)
>
>NOTICE:  QUERY PLAN:
>
>Hash Join  (cost=5.95..8.86 rows=1 width=1070)
>  ->  Seq Scan on auct_sys_infogruppe  (cost=0.00..2.61 rows=61 width=555)
>  ->  Hash  (cost=5.94..5.94 rows=1 width=515)
>->  Index Scan using xak1inf_information on inf_information  (cost=0.00..5.94 
>rows=1 width=515)
>
>EXPLAIN
>
>--
>
>testrpr=# EXPLAIN SELECT * from inf_information, auct_sys_infogruppe where inf_alias 
>= 'asdfasdf' and infgrp_id = auct_sys_infogruppe.inf_id;
>NOTICE:  QUERY PLAN:
>
>Nested Loop  (cost=0.00..9.66 rows=1 width=1070)
>  ->  Index Scan using xak1inf_information on inf_information  (cost=0.00..4.82 
>rows=1 width=515)
>  ->  Index Scan using xpkauct_sys_infogruppe on auct_sys_infogruppe  
>(cost=0.00..4.82 rows=1 width=555)
>
>NOTICE:  QUERY PLAN:
>
>Nested Loop  (cost=0.00..9.66 rows=1 width=1070)
>  ->  Index Scan using xak1inf_information on inf_information  (cost=0.00..4.82 
>rows=1 width=515)
>  ->  Index Scan using xpkauct_sys_infogruppe on auct_sys_infogruppe  
>(cost=0.00..4.82 rows=1 width=555)
>
>EXPLAIN
>
>No file was uploaded with this report
>
>
>---(end of broadcast)---
>TIP 2: you can get off all lists at once with the unregister command
>(send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])
>




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

http://archives.postgresql.org



Re: [BUGS] Bug #681: creating indices after data insertion

2002-05-29 Thread Tom Lane

Dmitry Tkach <[EMAIL PROTECTED]> writes:
> Did you vacuum it?

Even more to the point: vacuum analyze.

The described behavior sounds like the default assumptions in the
absence of any ANALYZE statistics ...

regards, tom lane

---(end of broadcast)---
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to [EMAIL PROTECTED] so that your
message can get through to the mailing list cleanly