Exists和In的一个代替方案
Posted by eDWARD at 16:55
项目需要,所以学习了一下如何想办法替代exists和in带来的性能问题,现给出一种方案:
首先定义两个TYPE,一个用来装INT,一个用来装VARCHAR
然后定义两个函数:
上面这两个函数分别接受用‘,’分隔的INT或VARCHAR串,然后填充到刚才建立的两个TYPE里,这样就可以联合查询而不用IN了。
最后在SQL里的使用方法如下,存错过程类似,所以就不举例了:)
select b.BidWordId, b.BidWord, b.MaxPrice, b.Title, b.Description, b.DisplayUrl, b.LinkUrl, b.Onlinestate, b.Validstate, c.Custstat, c.Custid from AuditList a, BidWord b, Customers c, (select COLUMN_VALUE from the (select cast(str2numList(?) as numTableType) from dual)) d where a.BidWordID = b.BidWordID and b.CustID = c.CustID and a.AuditState = 40 and a.CompleteType = 10 and a.TicketID = d.COLUMN_VALUE order by a.CompleteTime desc
