SQL优化之过长的in list和过多的or操作
CBO面对in (1,2,3,……)或者类似的or操作会做些什么呢?
1. 把in转换为union all操作,从而用到索引加快查询,可以使用use_concat提示强制该转换,这么做的缺点在于CBO面对每个union all操作都要计算cost,导致parse时间过长,解决办法见2;
2. 对应的操作为inlist iterator,可以使用NO_EXPAND提示强制进行,即使用了索引,同时避免了union all带来的cost计算问题;
还有一个从设计角度优化这个问题的思路:就是建表保存in数据,用join代替in操作。
呵呵,怎么建表保存in的数据,难道in里的个数是固定的 ??
如果为了解决parse问题,用type类型来实现绑定比较实际
有例子么?没这么用过……
表中保存一组inlist值,对应一个id,然后join;对于某些场景,或许有一些效果。