MySQL中的join语句算法及优化方式
发布时间:2022-01-18 16:03:38 所属栏目:MySql教程 来源:互联网
导读:本篇内容主要讲解MySQL中的join语句算法及优化方法,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习MySQL中的join语句算法及优化方法吧! 一、join语句算法 创建两个表t1和t2 CREATE TABLE `t2` ( `id` int(11) NO
本篇内容主要讲解“MySQL中的join语句算法及优化方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL中的join语句算法及优化方法”吧! 一、join语句算法 创建两个表t1和t2 CREATE TABLE `t2` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `a` (`a`) ) ENGINE=InnoDB; 1、Index Nested-Loop Join select * from t1 straight_join t2 on (t1.a=t2.a); 如果直接使用join语句,MySQL优化器可能会选择表t1或t2作为驱动表,通过straight_join让MySQL使用固定的连接方式执行查询,在这个语句里,t1是驱动表,t2是被驱动表 MySQL中的join语句算法及优化方法 被驱动表t2的字段a上有索引,join过程用上了这个索引,因此这个语句的执行流程是这样的: 1.从表t1中读入一行数据R 2.从数据行R中,取出a字段到表t2里去查找 3.取出表t2中满足条件的行,跟R组成一行,作为结果集的一部分 4.重复执行步骤1到3,直到表t1的末尾循环结束 这个过程可以用上被驱动表的索引,称之为Index Nested-Loop Join,简称NLJ 在这个流程里: 1.对驱动表t1做了全表扫描,这个过程需要扫描100行 2.而对于每一行R,根据a字段去表t2查找,走的是树搜索过程。由于我们构造的数据都是一一对应的,因此每次的搜索过程都只扫描一行,也是总共扫描100行 3.所以,整个执行流程,总扫描行数是200 假设不使用join,只能用单表查询: 1.执行select * from t1,查出表t1的所有数据,这里有100行 2.循环遍历这100行数据: 从每一行R取出字段a的值$R.a 执行select * from t2 where a=$R.a 把返回的结果和R构成结果集的一行 这个查询过程,也是扫描了200行,但是总共执行了101条语句,比直接join多了100次交互。 (编辑:好传媒网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |