数据库查询过程中条件过多如何解决?

来源:互联网 发布:网络摄像机 掉包 编辑:程序博客网 时间:2024/05/21 06:18

有如下查询语句:

select * from t_table where id in(id1,id2,...id10000)这种情况一般不会多见。在oracle中执行会抛"ORA-01795:表达式超过1000列"的异常

 

如何解决这个问题呢?

1) 将"in"表达式中的条件数据分为多份"or in"的表达式来执行。改变的代码如下

select * from t_table where id in (id1, id2, id3)

                                           or id in(id4,id5,id6)...

这种方法比较简便,但不易于维护。而且当id量过大时,分组过多效率也会很低。

2) 可以通过临时表来解决问题

   a) 创建临时表tbIdGroud,其中只有一个字段id,且为主键。

   b) 将大批量的id条件插入tbIdGroud

   c)  关联t_table,tbIdGroud进行多表查询。

   这种需要将条件数据插入临时表,会有一定的性能消耗,当id量不是超大时一般不推荐使用。

 

3) 需求过程中的解决

 

    这种问题的出现,可以回过来想是否在需求上还可以有更好的方法。可以通过以下方法类避开这个问题

    a) 当提交时超过一定数量的条件进入时,异常处理。

    b) 试着用模糊查询或定位查询来替换。