Ok, I think we should change the query in db_getmailbox_count to be < 2
because the plan really is a lot less expensive than IN (0, 1). I know
this was a thread/bug we had a week or two ago, but it popped into my
head today that maybe the planner was guessing the IN (0, 1) meant the
same at < 2. It doesn't, and even on Pg 8, it's still more expensive.

Aaron

dbmail=# explain select message_idnr from dbmail_messages where
mailbox_idnr = 1 and status in (0, 1) order by message_idnr asc;
                                                    QUERY
PLAN                                                    
------------------------------------------------------------------------------------------------------------------
 Sort  (cost=9.67..9.67 rows=1 width=8)
   Sort Key: message_idnr
   ->  Index Scan using dbmail_messages_8, dbmail_messages_8 on
dbmail_messages  (cost=0.00..9.66 rows=1 width=8)
         Index Cond: (((mailbox_idnr = 1) AND (status = 0)) OR
((mailbox_idnr = 1) AND (status = 1)))
         Filter: ((mailbox_idnr = 1) AND ((status = 0) OR (status = 1)))
(5 rows)

dbmail=# explain select message_idnr from dbmail_messages where
mailbox_idnr = 1 and status < 2 order by message_idnr asc;
                                          QUERY
PLAN                                           
-----------------------------------------------------------------------------------------------
 Sort  (cost=8.31..8.31 rows=2 width=8)
   Sort Key: message_idnr
   ->  Index Scan using dbmail_messages_8 on dbmail_messages
(cost=0.00..8.30 rows=2 width=8)
         Index Cond: ((mailbox_idnr = 1) AND (status < 2))


Reply via email to