资源描述:
《mysql中join算法实现原理分析--》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、MySQL中Join算法实现原理分析>> 在MySQL中,只有一种Join算法,就是大名鼎鼎的NestedLoopJoin,他没有其他很多数据库所提供的HashJoin,也没有SortMergeJoin。顾名思义,NestedLoopJoin实际上就是通过驱动表的结果集作为循环基础数据,然后一条一条的通过该结果集中的数据作为过滤条件到下一个表中查询数据,然后合并结果。如果还有第三个参与Join,则再通过前两个表的Join结果集作为循环基础数据,再一次通过循环查询条件到第三个表中查询数据,如此往复。 还是通
2、过示例和图解来说明吧,后面将通过我个人数据库测试环境中的一个example(自行设计,非MySQL自己提供)数据库中的三个表的Join查询来进行示例。 注意:由于这里有些内容需要在MySQL5.1.18之后的版本中才会体现出来,所以本测试的MySQL版本为5.1.26 表结构:1 skylocalhost : example 11:09:32> shot_create` datetime NOT NULL,16 17 `gmt_modified` datetime NOT NULL,18 19 `s
3、tatus` varchar(16) NOT NULL,20 21 KEY `idx_user_group_uid` (`user_id`)22 23 ) ENGINE=MyISAM DEFAULT CHARSET=utf824 25 1 rople 11:10:32> shoessageG28 29 *************************** 1. roessage32 33 Create Table: CREATE TABLE `group_message` (34 35 `id` in
4、t(11) NOT NULL AUTO_INCREMENT,36 37 `gmt_create` datetime NOT NULL,38 39 `gmt_modified` datetime NOT NULL,40 41 `group_id` int(11) NOT NULL,42 43 `user_id` int(11) NOT NULL,44 45 `author` varchar(32) NOT NULL,46 47 `subject` varchar(128) NOT NULL,48 49 PRIM
5、ARY KEY (`id`),50 51 KEY `idx_group_message_author_subject` (`author`,`subject`(16)),52 53 KEY `idx_group_message_author` (`author`),54 55 KEY `idx_group_message_gid_uid` (`group_id`,`user_id`)56 57 ) ENGINE=MyISAM AUTO_INCREMENT=97 DEFAULT CHARSET=utf858 5
6、9 1 rople 11:10:43> shoessage_contentG62 63 *************************** 1. roessage_content66 67 Create Table: CREATE TABLE `group_message_content` (68 69 `group_msg_id` int(11) NOT NULL,70 71 `content` text NOT NULL,72 73 KEY `group_message_content_msg_
7、id` (`group_msg_id`)74 75 ) ENGINE=MyISAM DEFAULT CHARSET=utf876 77 1 ro.subject msg_subject, c.content msg_content2 3 from user_group g,group_message m,group_message_content c4 5 .group_id = g.group_id8 9 and c.group_msg_id = m.id 123下一页>>>>这篇文章来自..,。看看我们的
8、Query的执行计划:1 skylocalhost : example 11:17:04> explain select m.subject msg_subject, c.content msg_content2 3 -> from user_group g,group_message m,group_message_content c4 5 -> .group_id = g.gr