在面试过程中,80%都会遇到mysql数据库优化相关的技术点,下面简单的讲解下数据库join连表查询的优化方式。
首先明白join的原理
join原理
首先介绍一种基础算法:NLJ,嵌套循环算法。重点join的多表查询方式:循环外层是驱动表,循坏内层是被驱动表
例如:
foreachrow1fromt1
foreachrow2fromt2
ifrow2matchrow1//row2与row1匹配,满足连接条件
joinrow1androw2intoresult//连接row1和row2加入结果集
首先加载t1,然后从t1中取出第一条记录,之后加载t2表,与t2表中的记录逐个匹配,连接匹配的记录。
在项目的用户量日积月累,原来的数据库查询方式就会有问题,出现慢查询,因此就需要将这些慢查询解决掉。提高查询速度。
1.内循环的次数:由此得出,小表驱动大表能够减少内循环的次数从而提高连接效率。
2.快速匹配:在被驱动表建立索引能够提高连接效率
3.排序:优先选择驱动表的属性进行排序能够提高连接效率。
举例分析:t1大表t2小表
左连接
左表是驱动表,右表是被驱动表。想要快速查找被驱动表中匹配的记录,所以我们可以在右表建索引,从而提高连接性能。
右连接
右表是驱动表,左表是被驱动表,想要快速查找被驱动表中匹配的记录,所以我们可以在左表建索引,从而提高连接性能
内连接
不管谁内连接谁,都是用小表驱动大表,所以如果要优化内连接,可以在大表上建立索引,以提高连接性能。
总结:
想要从快速匹配的角度优化JOIN,首先就是找出谁是驱动表,谁是被驱动表,然后在被驱动表上建立索引即可。