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

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

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

  环境: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='...'
    点赞 打赏 评论
  • 王启军 2011-03-25 14:42

    应该避免使用子查询,性能瓶颈
    ps:适当建立索引,3w的数据不是问题

    点赞 打赏 评论
  • deepfuture 2011-03-25 15:49

    AND所有条件,然后在这个结果集中模糊查询“公司名称”
    只有这样,在进行迪卡尔积运算时,系统会自动优化的

    点赞 打赏 评论

相关推荐 更多相似问题