汤利国 2011-03-25 14:35
浏览 247
已采纳

请教数据库多条件查询效率优化问题

  以前学的编程,好久不用现在忘的都差不多了。最近帮朋友写个小程序,对于多条件查询有些问题,听听大家的指点。谢谢!

  环境:jdk1.7、sqlserver2000、tomcat6.0

  查询条件:邮政编码、员工人数、机器设备数量、项目编号(不是主键id)、营业范围、公司名称。

  我现在有两种方案,一是AND所有条件,然后在这个结果集中模糊查询“公司名称”,还有一个就是查询最严格的条件,然后分别把结果集作为查询范围,再在这个结果集的范围里查询次严格的条件,以此类推,最后再模糊查询“公司名称”。(就是:SELECT * FROM 表 WHERE name LIKE '%条件%' AND EXISTS (SELECT * FROM 表 WHERE 字段=条件 AND EXISTS(......)))

  目前数据量在3万左右,以后还会增长。想请问大家,这两种查询语句,哪种效率更高一点?

  我不太懂数据库的查询原理,但是个人感觉如果是AND的话,应该是找出一条记录来比对条件字段,就算是整表查的话,它最多也是查一次,但是会比较很多字段。

  可是如果是子查询的话,遇到需要整表查的字段,也许至少要整表查询一次甚至更多。虽然每次可能只是比对一个字段,但是可能会整表检索很多次。

  个人感觉是拼接条件比子查询效率要高一点,但是不确定,所以发贴听听大家的建议,谢谢。

  • 写回答

3条回答 默认 最新

  • iteye_4938 2011-03-25 23:57
    关注
    1. 在经常被查询的字段上创建索引
    2. 对于类似于数据字典的字段,不要建立索引,比如,如果你的“营业范围”有固定的枚举,那么不要创建索引
    3. 不要使用select * ,而是使用 select col1,col2....
    4. 避免使用distinct
    5. 将区分度高的查询字段放在where的最后一个,比如 where col_1='...' and col_2='...',如果通过col_2='...'可以将结果集从3W缩小到300,而col_1='...'只能缩小到3000,那么就 where col_1='...' and col_2='...'
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog