数据库查询过程中条件过多如何解决?
2010-05-16 19:34
274 查看
有如下查询语句:
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) 试着用模糊查询或定位查询来替换。
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) 试着用模糊查询或定位查询来替换。
相关文章推荐
- linq to sql 中,如何解决多条件查询问题,答案,用表达式树! (下)
- linq to sql中,如何解决多条件查询问题,答案,用表达式树!
- Mybatis关联查询,查询出的记录数量与数据库直接查询不一致,如何解决?
- 数据库查询速度极慢【个人工作问题解决过程记录】
- elasticsearch 如何能像数据库一样,按条件精准查询
- 在数据库中条件查询很慢的时候,如何优化
- 如何让从数据库中查询出符合条件的记录,然后给每个记录自动加上序号,序号是根据符合条件的记录多少在随时变化.而且也会在以查询生成的报表中显示出来.谢谢
- hibernate面试题 --- 在数据库中条件查询很慢的时候,如何优化
- 在数据库中条件查询很慢的时候,如何优化
- spring hibernate3.0 如何解决多条件查询
- 解决:hibernate查询过多时与数据库连接断开或无法再查询到数据问题。
- SqlServer 数据库查询时,英文大小写不区分,如何解决
- Oracle 数据库如何搜集指定SQL的执行计划和解决过程中的ORA-00904错误
- linq to sql 中,如何解决多条件查询问题,答案,用表达式树! (下)
- 总结数据库查询软件的开发和问题解决过程
- 数据库安装错误的解决方式 【转】如何处理 SQL Server 安装过程中的 COM+ 检查失败问题 - ...
- 如何解决数据库查询慢问题
- 如何查询数据库中的所有触发器、储存过程、视图、表
- 如何解决动态查询语句太长,大于数据库字符的最大长度
- 查询数据库数据连续性问题---存储过程解决