广

MYSQL

  • MYSQL
  • MSSQL
  • Redis
  • MongoDB
  • oracle数据库
  • 数据管理

    MySQL中Join算法实现原理分析

    2018-04-16 10:57:33 次阅读 稿源:互联网
    零七网广告
    全网推广平台,软文发布

      在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)

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七网广告
    零七网广告
    零七网广告
    零七网广告