mysql⼩表连⼤表_mysql的⼤⼩表前后顺序对innerjoin的效率
有影响吗?
Aititi 集合连接 表格连接的join算法 attilax总结 艾提拉总结
常见的join算法 - CSDN博客.html
Nexted-loop join中⼩表驱动⼤表的原因分析
原创 2017年07⽉31⽇ 20:53:27
· 标签:
· 414
1.
Next-loop join:
1. outer_iterator = ,A.c FROM A IN (5,6);
2. outer_row = ;
3. while(outer_row) {
4. inner_iterator = FROM B WHERE B.c = outer_row.c;
5. inner_row = ;
6. while(inner_row) {
7. output[,];
8. inner_row = ;
9. }
10. outer_row = ;
11. }
过滤后留下的结果集M,N(M>N) 1.如果都⾛全表的话,⼤表做驱动和⼩表做驱动都是M*N 2.如果⾛索
mysql下载csdn引的话: a.索引对⼩表的作⽤不会太⼤,对于⼤表索引的作⽤就很⼤了,除⾮索引建的不好。。 b.假设nexted-loop join中驱动表过滤后的⾏数为K,那么while(outer_row)⼀定会循环K次,这时驱动表上索引的功能是⽐聚簇索引占有更⼩的空间,⼀个节点上的数据量会更⼤些,减少随机I/O。 c.如果被驱动表过滤后的⾏数为W,那么在while(outer_row)中两表连接条件上被驱动表还有机会利⽤索引来⼤⼤减少内循环的次数。
所以过滤结果中的⼩表做驱动表。。
果两个表⼀样⼤,效率是⼀样的。 如果两个表的数据量相差很⼤,那效率上是有区别的。 ⼀般来说,⼩表去join⼤表,效率要⽐⼤表去join ⼩表⾼的多。 通常SQL会⾃动去选择效率好的查询⽅案。 所以写SQL尽量先查询和过滤数据量⼩的表,再去join⼤的表。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论