mysql left join查询慢的问题

本文探讨了MySQL在执行JOIN操作时,特别是LEFT JOIN时,关联字段字符集不一致可能导致的查询速度减慢问题。解决方法包括确保字段编码和校对规则的一致性,以及为关联字段和排序字段创建索引。此外,优化还包括选择小表作为驱动表,利用WHERE条件过滤大表数据,以及避免在WHERE中使用右表的非空条件等。这些策略能显著提升JOIN查询的效率。
摘要由CSDN通过智能技术生成

mysql inner join 或者left join 时,假如两个表的关联字段的字符集不一致,会导致查询速度很慢,本人亲身经历过这个问题。。(本问题对应以下内容的第6点)

mysql left join 优化方案

1、left join选择小表作为驱动表(这部分基本是大家的共识)

2、如果左表比较大,并且业务要求驱动表必须是左表,那么我们可以通过where条件语句,使得左表被过滤的小一些,主要原理和第一条类似

3、关联字段给索引,因为在mysql的嵌套循环算法中,是通过关联字段进行关联,并查询的,所以给关联字段索引很必要

4、如果sql里面有排序,请给排序字段加上索引,不然会造成排序使用全表扫描
		参考:https://www.oschina.net/question/930697_2190172
		
5、如果where条件中含有右表的非空条件(除开is null),则left join语句等同于join语句,可直接改写成join语句。 

6、根据文档,MySQL能更高效地在声明具有相同类型和尺寸的列上使用索引。所以把表与表之间的关联字段给上encoding和collation(决定字符比较的规则)全部改成统一的类型

7、右表的条件列一定要加上索引(主键、唯一索引、前缀索引等),最好能够使type达到range及以上(ref,eq_ref,const,system) 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值