本文我们继续补充编码规范。本文主要介绍的是join查询。
在使用join查询的时候,我们大家都应该了解到使用小表做驱动表,大表做被驱动表。如果问的话,大家其实可能会简单的回答小表可以放在内存里面。但是这个答案对于我来说在join的查询里面只能算是30%。
本文我们就要介绍下join相关的查询规范
1、join用小结果做驱动表
其实对于join来说,他join的流程如下:
所以从上图可以看出其实是小结果对应的表作为驱动表。而不是纯粹的小表。这里的小结果由:查询字段信息+where条件决定的。所以在做join的时候一定要注意,根据小结果来做驱动表。小结果的数据会被存放在join buffer中。
备注:
1、如果join buffer比较大的话,如果是大结果能被放到join buffer里面,那么可以无所谓小结果或者大结果做驱动表了。
2、禁止使用*星号
在做join操作的时候,我们是禁止使用*号的,为什么呢?因为在mysql进行join的时候对应的查询列会被放到join buffer里面去。如果使用*的时候,那么所有的字段都会被放进join buffer,可能造成join buffer缓存不够,就会增加回表查询的代价。增加join的响应效率。
3、被驱动表的on字段必须添加索引
我们知道join的时候都会使用on xxx=xxx,此时被驱动表一般都是大结果,所以被驱动表对应的字段没有索引的话,那么就会进行全表扫描。此时的join查询就会非常久,影响效率。
以上的规范是我们在代码里面使用join查询的要求,同时如果涉及到join的sql优化的时候,也可以参考上面的规范点进行优化。
还没有评论,来说两句吧...