前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mysql Join的实现原理

Mysql Join的实现原理

作者头像
dys
发布2018-04-02 16:35:54
1.6K0
发布2018-04-02 16:35:54
举报
文章被收录于专栏:性能与架构性能与架构

在MySQL中,只有一种Join算法,就是大名鼎鼎的NestedLoop Join

对左表进行遍历,拿一条数据和右表的每条数据进行比对,如果找到N条匹配的,此条左表记录分别和这N条右表记录组合为N条记录,放到结果集合中,如果还有第三个表参与Join,则把前两个表的Join结果集作为循环基础数据,再一次通过循环查询条件到第三个表中查询数据,如此往复

示例

有3个表:

user_group 用户组

group_message 组消息

group_message_content 消息内容

想要取得某个用户所在组的信息列表,执行下面的查询:

SELECT m.subject msg_subject, c.content msg_content

from user_group g,group_message m,group_message_content c

WHERE g.user_id = 1 and m.group_id = g.group_id and c.group_msg_id = m.id

这个查询过程会有3步:

(1)在user_group表中查找user_id = 1的记录

(2)以user_group表过滤出来的结果集中的group_id字段作为查询条件,对group_message循环查询

(3)通过将user_group和group_message这两个表的结果集中的group_message的id作为条件,与group_message_content的group_msg_id比较进行循环查询

因为上面的每一步都有索引可以用,所以非常快,假如去掉group_message_content表中group_msg_id字段的索引

第3步会变成全表扫描group_message_content,逐一比较每行group_msg_id字段值,同时会使用 join buffer,来尽量让查询速度快一点

所以在连接查询中正确设定索引是非常重要的

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档