汤利国 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 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘