四时宝库

程序员的知识宝库

MySQL中join连接索引优化实战分析

两张表左连接索引优化


#第一种情况,不加索引
mysql>explain select * from news a left join new_type b on a.type_id=b.TypeId;

结果:我们看到两张表都是全表扫描,type类型全是ALL,此时性能最差


#第二种情况,左连接给左表加索引

mysql>create index type_id on news(type_id);
mysql>explain select * from news a left join new_type b on a.type_id=b.TypeId;


结果:左连接给左表加完索引,没有任何效果,并且还是全表扫描,效率极差。


#第二种情况,左连接给右表加索引

mysql>create index type_id on news(type_id);
mysql>explain select * from news a left join new_type b on a.type_id=b.TypeId;

结果:左连接给右表加完索引,使用到了索引,且还是ref级别的。


两张表右连接索引优化

#右连接给右表加索引

mysql>explain select * from news a right join new_type b on a.type_id=b.TypeId;

结果:右连接给右表加完索引,没有任何效果,并且还是全表扫描,效率极差。


#右连接给左表加索引

mysql>explain select * from news a left join new_type b on a.type_id=b.TypeId;

结果:右连接给左表加完索引,使用到了索引,且还是ref级别的。


注意(单表查询)多条件查询:

  1. 我们创建的联合索引的顺序是category_id、comments、views

结果:虽然使用到了index索引(全表扫描,只是扫描表的时候按照索引次序 进行而不是行。主要优点就是避免了排序, 但是开销仍然非常大),但是产生了文件排序,性能很差


  1. 创建category_id、views联合索引



结论:如果在where条件中如果有三个查询查询条件key1、key2、key3,其中key2条件是范围查询,

则需要创建key1、key3的复合索引。


结论:

  1. 左连接索引加右表。
  2. 右连接索引加左表


点击关注发私信或评论交流文章中有问题的地方,相互学习和答疑

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接