| 
                        在MySQL 中,只有一种 Join 算法,就是大名鼎鼎的 Nested Loop Join,他没有其他很多数据库所提供的 Hash Join,也没有 Sort Merge Join。顾名思义,Nested Loop Join 实际上就是通过驱动表的结果集作为循环基础数据,然后一条一条的通过该结果集中的数据作为过滤条件到下一个表中查询数据,然后合并结果。如果还有第三个参与 Join,则再通过前两个表的 Join 结果集作为循环基础数据,再一次通过循环查询条件到第三个表中查询数据,如此往复。
 还是通过示例和图解来说明吧,后面将通过我个人数据库测试环境中的一个 example(自行设计,非MySQL 自己提供) 数据库中的三个表的 Join 查询来进行示例。 
注意:由于这里有些内容需要在MySQL 5.1.18之后的版本中才会体现出来,所以本测试的MySQL 版本为5.1.26 
表结构: 
1 sky@localhost : example 11:09:32> show create table user_groupG 
2 
3 *************************** 1. row *************************** 
4 
5 table: user_group 
6 
7 Create table: CREATE table `user_group` ( 
8 
9 `user_id` int(11) NOT NULL, 
10 
11 `group_id` int(11) NOT NULL, 
12 
13 `user_type` int(11) NOT NULL, 
14 
15 `gmt_create` datetime NOT NULL, 
16 
17 `gmt_modified` datetime NOT NULL, 
18 
19 `status` varchar(16) NOT NULL, 
20 
21 KEY `idx_user_group_uid` (`user_id`) 
22 
23 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 
24 
25 1 row in set (0.00 sec) 
26 
27 sky@localhost : example 11:10:32> show create table group_messageG 
28 
29 *************************** 1. row *************************** 
30 
31 table: group_message 
32 
33 Create table: CREATE table `group_message` ( 
34 
35 `id` int(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 PRIMARY 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=utf8 
58 
59 1 row in set (0.00 sec) 
60 
61 sky@localhost : example 11:10:43> show create table group_message_contentG 
62 
63 *************************** 1. row *************************** 
64 
65 table: group_message_content 
66 
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_id` (`group_msg_id`) 
74 
75 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 
76 
77 1 row in set (0.00 sec)                         (编辑:滁州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |