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

数据库 MySQL
以下的文章主要向大家讲述的是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

 

原文标题: MySQL的join 

连接:http://www.cnblogs.com/arlen/articles/1752456.html

以上的相关内容就是对MySQL数据库中的join 的介绍,望你能有所收获。

【编辑推荐】

  1. ASP.NET连接MySQL数据库的正确解决方案
  2. 启动与关闭MySQL的一大绝招
  3. MySQL免安装版-添加服务实操演示
  4. MySQL数据库中的自动备份破坏后的建立
  5. mssql转换为MySQL数据库经验漫谈

 

责任编辑:佚名 来源: MySQL
相关推荐

2010-06-12 09:53:19

2010-05-13 13:49:09

MySQL数据库

2010-04-19 09:26:04

Oracle数据库

2010-05-28 11:41:46

MySQL数据库备份

2010-05-20 15:22:37

2018-07-30 15:00:05

数据库MySQLJOIN

2010-05-25 18:21:28

MySQL连接数据库

2010-05-13 14:57:03

MySQL数据库接口

2010-05-12 18:41:34

MySQL数据库

2010-05-28 14:51:47

MySQL数据库

2010-05-18 17:24:44

MySQL修改表字段

2010-05-31 14:59:36

PHP + MySQL

2010-05-25 14:42:14

MySQL 数据库

2010-04-21 11:27:55

Oracle数据库

2010-04-01 13:09:12

Oracle中join

2010-03-30 11:15:26

Oracle数据库

2010-04-13 12:23:34

Oracle数据库

2010-06-17 10:02:12

SQL Server数

2010-04-09 16:26:53

Oracle join

2010-05-25 08:49:33

连接MySQL
点赞
收藏

51CTO技术栈公众号