MySQL源码:Range访问方式相关的数据结构--续

php中文网
发布: 2016-06-07 16:34:56
原创
1942人浏览过

前文着重介绍了MySQL的WHERE条件如何针对 单个 索引构造对应的SEL_ARG结构,本文是一个补充,将简单介绍多个索引对应的SEL_TREE结构。 对于一个完整的WHERE条件,MySQL会遍历所有可以使用的索引,逐一构造其对应的SEL_ARG结构,所有的SEL_ARG结构以指针数组

前文着重介绍了mysql的where条件如何针对单个索引构造对应的sel_arg结构,本文是一个补充,将简单介绍多个索引对应的sel_tree结构。

对于一个完整的WHERE条件,MySQL会遍历所有可以使用的索引,逐一构造其对应的SEL_ARG结构,所有的SEL_ARG结构以指针数组的形式存放在SEL_TREE->keys中。如果对应索引无法构造SEL_ARG,那么对应的指针为空。

class SEL_TREE :public Sql_alloc
{
...
  SEL_ARG *keys[MAX_KEY];
...
};
登录后复制

gdb打印对应的结构:

(gdb) p $1
$2 = (SEL_TREE *) 0x7f59c4038348
(gdb) p *$1
$3 = {
...
  keys = {0x0, 0x7f59c4038598, 0x0 },
...
}
登录后复制

SEL_TREE是一个数组,但如果像他的名字,他如果真是一棵树的话,那么将是如下结构:

                                          [ key1 part1 ]        [ key1 part2 ]            [ key1 part3 ]
            -\ /-                                        $                            $
              -                         / SEL_ARG(-∞, 1) $ ===>  SEL_ARG  [5,5] ===>  $ SEL_ARG [10,10]
              |......                   |        |^      $                            $        |^
              |                         |    next||      $                            $    next||
        ......|                         |        ||prev  $                            $        ||prev
    0x0       |              /--------->|        ||      $                            $        v
      \       |              |          |        ||      $                            $ SEL_ARG [12,12]
       \------|              |          |        ||      $                            $
        [key4]|              |          |        v|      $                            $
              |              |          | SEL_ARG [2, 2] $=== next_key_part =====|    $
              |      [link of SEL_ARG]  |        |^      $                       |    $
              |         /               |    next||      $                       |    $
              |--------/                |        ||prev  $                       |===>$ SEL_ARG[11,11]
              | [key3]                  |        v|      $                       |    $         |^
              |                         \ SEL_ARG [3, 3] $=== next_key_part =====|    $     next||
              |                                          $                            $         ||prev
              |                                          $                            $         v|
              |                                                                      SEL_ARG[14,14]
  [SEL_ARG]   |     *************************
      \       |     * structure of SEL_TREE *
       \------|     *************************
        [key2]|
              |
              |                           [ key1 part1 ]
              |                         / SEL_ARG (-∞,2]  $            SEL_ARG [3,5)
              |                         |        |^       $                /\ Black
              |                         |    next||       $               /  \
              |      [link of SEL_ARG]  |        ||prev   $              /    \
              |         /     |         |        v|       $ SEL_ARG (-∞,2]   SEL_ARG (10,∞)
              |--------/      |         | SEL_ARG [3,5)   $         Red           Red
              | [key1]        |-------->|        |^       $
              |                         |    next||       $
              |                         |        ||prev   $
          SEL_TREE                      |        v|       $
                                        \ SEL_ARG (10,∞)  $
                                                          $
登录后复制

(大图)

That's all. 本文较为简单。

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号