Re: or kills performance
От | Sim Zacks |
---|---|
Тема | Re: or kills performance |
Дата | |
Msg-id | 64680015.20050831085023@compulab.co.il обсуждение исходный текст |
Ответ на | Re: or kills performance (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: or kills performance
|
Список | pgsql-general |
My goal is a specific batchid, stock>0, ownerid=1 and either leadfree with a state of 1 or 3 OR not leadfree with a stateof 2,3 or 4 The parenthesis are correct: where a.batchid=382 and e.stock>0 and e.ownerid=1 and ( (d.leadfree and leadstateid in (1,3) ) or (not d.leadfree and leadstateid in (2,3,4) ) ) order by partid,leadstateid I checked my indices and every field in both the where clause and the join is already indexed. I tried unioning the 2 queries and it was much faster then with the OR statement. (Took 200 ms as opposed to 2000 ms). Theunion will work, but it seems like overkill for a simple or clause. Is this the recommended way to do it? select c.partid,c.pnid,c.leadstateid,e.stock from assemblies d join assembliesbatch a on d.assemblyid=a.assemblyid join partsassembly b on b.assemblyid=d.assemblyid join manufacturerpartpn c on c.partid=b.partid join stock e on e.pnid=c.pnid where a.batchid=382 and e.stock>0 and e.ownerid=1 and not d.leadfree and leadstateid in (2,3,4) union select c.partid,c.pnid,c.leadstateid,e.stock from assemblies d join assembliesbatch a on d.assemblyid=a.assemblyid join partsassembly b on b.assemblyid=d.assemblyid join manufacturerpartpn c on c.partid=b.partid join stock e on e.pnid=c.pnid where a.batchid=382 and e.stock>0 and e.ownerid=1 and d.leadfree and leadstateid in (1,3) order by partid,leadstateid ________________________________________________________________________________ "Sim Zacks" <sim@compulab.co.il> writes: > Does it make sense for a simple or in a where clause to kill performance? Did you get the parenthesization correct? Remember that AND binds more tightly than OR. regards, tom lane
В списке pgsql-general по дате отправления: