mysql 表关联之后索引失效的原因排查

1、两表关联使用的条件字段中字段的长度是否是一致的

2、两表关联使用的条件字段中字段的编码是否是一致的

3.因索引字段太长,字段太靠后,服务器性能,联合索引没遵循最左匹配原则,mysql配置等其它原因导致优化器放弃使用索引

我发现关联条件的索引字段所在的行太靠后,在我调整到前面,又缩小长度之后索引生效了

这个mysql优化器在mysql不同版本,不同服务器上,不同查询条件  所优化后的sql语句并不相同。只有多动手试试才知道,sql优化在很多细节上只有调试过才知道好用不好用

4,没用到关联表中的字段去查询

我发现的问题就是第4个,

客户信息36万,房源客户表62万,关联了却没用到中间表的城市id去查导致没有用到索引,直接导致查询崩溃

优化之后我的分页查询是这样的,(或者直接在map中动态关联)

 
 if("2".equals(customer.getSourceType())&&customer.getHoHouseCustomer()!=null&&StringUtils.isNotBlank(customer.getHoHouseCustomer().getHoCityCode())){
             customer.setPage(page);
             //用到ho的城市查询条件则关联查ho的中间关系表
             page.setList(dao.findFastHoList(customer));
             return page;
         }else if("1".equals(customer.getSourceType())&&customer.getResHouseclient()!=null &&StringUtils.isNotBlank(customer.getResHouseclient().getField1())){
			 customer.setPage(page);
              // //用到res的城市查询条件则关联查res的中间关系表
			 page.setList(dao.findFastResList(customer));
			 return page;
         }else{
			 customer.setPage(page);
			 page.setList(dao.findFastList(customer));
			 return page;
         }

列表所需要的房源地址信息可查出这20条数据之后再 去房源客户表中去一个一个去拿

(或者反范式直接放到客户表中)

不然为了列表的中的20条房源信息需要关联ho房源60万数据,物业房源50万数据,

而且没有房源条件筛选,优化器就可能认为没有条件筛选就是全表扫描,当然不会用索引, 

 就是用到了这样大的关联查询也不会快。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值