Re: Need to increase performance of a query
От | Craig James |
---|---|
Тема | Re: Need to increase performance of a query |
Дата | |
Msg-id | 4C11413B.8080107@emolecules.com обсуждение исходный текст |
Ответ на | Re: Need to increase performance of a query (Anne Rosset <arosset@collab.net>) |
Ответы |
Re: Need to increase performance of a query
Re: Need to increase performance of a query |
Список | pgsql-performance |
On 6/10/10 12:34 PM, Anne Rosset wrote: > Jochen Erwied wrote: >> Thursday, June 10, 2010, 8:36:08 PM you wrote: >> >>> psrdb=# (SELECT >>> psrdb(# MAX(item_rank.rank) AS maxRank >>> psrdb(# FROM >>> psrdb(# item_rank item_rank >>> psrdb(# WHERE >>> psrdb(# item_rank.project_id='proj2783' >>> psrdb(# AND item_rank.pf_id IS NULL >>> psrdb(# >>> psrdb(# ) >>> psrdb-# ORDER BY >>> psrdb-# maxRank DESC; >> >> Don't think it does really matter, but why do you sort a resultset >> consisting of only one row? >> > Sorry, I should have removed the ORDER by (the full query has a union). > So without the ORDER by, here are the results: > psrdb=# SELECT > psrdb-# MAX(item_rank.rank) AS maxRank > psrdb-# FROM > psrdb-# item_rank item_rank > psrdb-# WHERE > psrdb-# item_rank.pf_id='plan1408'; > maxrank > ------------- > 20504000000 > (1 row) > > Time: 1.516 ms > psrdb=# SELECT > psrdb-# MAX(item_rank.rank) AS maxRank > psrdb-# FROM > psrdb-# item_rank item_rank > psrdb-# WHERE > psrdb-# item_rank.project_id='proj2783' > psrdb-# AND item_rank.pf_id IS NULL; > maxrank > ------------- > 20200000000 > (1 row) > > Time: 13.177 ms > > Is there anything that can be done for the second one? Postgres normally doesn't index NULL values even if the column is indexed, so it has to do a table scan when your query includesan IS NULL condition. You need to create an index that includes the "IS NULL" condition. create index item_rank_null_idx on item_rank(pf_id) where item_rank.pf_id is null; Craig
В списке pgsql-performance по дате отправления: