MySQL数据库中的join的实际应用演示

此文章主要向大家描述的是MySQL数据库中的join的实际应用,我们大家都知道MySQL数据库的join只有一种,及nested loop。对于在被连接的数据子集处于较小的情况下,nested loop连接是个较好的选择。

创新互联建站坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、成都网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的澄城网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

nested loop就是扫描一个表,每读到一条记录,就根据索引去另一个表里面查找,没有索引一般就不会是 nested loops。

一般在nested loop中, 驱动表满足条件结果集不大,被驱动表的连接字段要有索引,这样就走nstedloop。如果驱动表返回记录太多,就不适合nested loops了。如果连接字段没有索引,则适合走hash join,因为不需要索引。

这段说的是oracle下nestedloop。在MySQL中,只有nestedloop。

nested loop的过程:选择row resource 最小的那个表作为驱动表(外部表),内部表要求有选择性高的index。 从外部表(驱动表)里一次取一行对内部表的每行进行比较,即外部表有几个distinct行,就有几次nested loop。

所以nested loop的代价是:

 
 
 
 
  1. cost = outer access cost + (inner access cost * outer cardinality) 

outer access cost应该是读取驱动表到内存,而内部表要求有有效的index也是为了降低inner access cost,而驱动表要求小,也就很好理解了。

个人观点:当被驱动表的连接字段并没有建立索引时,用小结果集来驱动大结果集和用大结果集来驱动小结果集效果应该是一样的,都需要全表扫,无非就是m*n和n*m的关系

简朝阳在他的书中也有这么一段话:永远用小结果集驱动大结果集……此优化的前提条件是 通过join条件每次对各个表进行访问的资源消耗差别不是太大。

如果资源消耗有较大的差别(一般都是因为索引的区别),就不能简单的通过结果集的大小来判断join语句的驱动顺序,而是要通过比较循环次数和每次循环所须消耗之乘积大小来确定优化方案了。

当前题目:MySQL数据库中的join的实际应用演示
网站链接:http://www.shufengxianlan.com/qtweb/news29/400379.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联