Home > Uncategorized > SQL优化之过长的in list和过多的or操作

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操作。

Categories: Uncategorized Tags: ,
  1. 棉花糖ONE
    August 9th, 2009 at 21:30 | #1

    呵呵,怎么建表保存in的数据,难道in里的个数是固定的 ??

  2. 棉花糖ONE
    August 9th, 2009 at 21:35 | #2

    如果为了解决parse问题,用type类型来实现绑定比较实际

  3. August 10th, 2009 at 10:00 | #3

    有例子么?没这么用过……

  4. August 10th, 2009 at 10:04 | #4

    表中保存一组inlist值,对应一个id,然后join;对于某些场景,或许有一些效果。

  1. No trackbacks yet.