1、引言
        InnoDB 存储引擎支持以下几种觉的索引:
            1.1    B+ 树索引 (平衡树索引)
            1.2    全文索引
            1.3    哈希索引
            InnoDB 存储引擎支持的哈希索引是自适应的, InnoDB 存储引擎会根据表的使用情况自动为表生成哈希索引,也就是说无法人为在表中生成哈希索引。
            B+ 树索引就是传统意义上的索引,目前关系型数据库中查找最为常用和最为有效的索引用。B+ 树索引引的构造类似于二叉树,根据键值快速找到数据。
        注:B+ 树索引不能找到一个给定键值的具体行。B+ 树索引能找到的只是被查找数据行所在的页。然后数据库通过把页读入到内存,在内存中进行查找数据。
 
2、数据结构与算法
        在介绍索引之前先介绍与之密切相关的一些算法和数据结构,帮助读者更好的理解B+ 树索引的工作方式。
        2.1、二分查找法
        2.2、二叉查找树和平衡二叉树
        2.3、B+树
3、B+树索引
        前面讨论的都是B+树的数据结构及其一般操作,B+树索引的本质就是B+树在数据库中的实现。B+树索引在数据库中特点是:高扇出性,因此B+树的调试一般都在2—4层,也就是说查找某一键值的行记录时最多只需要2到4次IO。
        数据库中B+树索引分为 聚集索引( clustered index ) 和 辅助索引 ( secondary index ),但是不管是聚集索引还是辅助索引,内部都是B+scf,高度平衡,叶子节点存放着所有数据。
        聚集索引 和 辅助索引区别:叶子节点存放的是否是一整行的信息
        3.1、聚集索引
                聚集索引 ( clustered index ) 按照每张表的主键构造一棵 B+树,同时叶子节点存放的为整张表的行记录数据,也将聚集索引的叶子节点称为数据页。由于实际的数据页只能按照一棵B+树进行排序,所以每张表只能拥有一个聚集索引。查询优化器倾向于采用聚集索引。聚集索引能在B+树索引的叶节点上直接找到数据,是由于定义了数据的逻辑顺序。聚集索引适用于针对范围值的查询。
                优点:对于主键排序查找和范围查找速度非常快。
        3.2、辅助索引 ( 非聚集索引 )
                辅助索 ( secondary index ) ,叶子节点并不包含行记录的全部数据。叶子节点除了包含键值以外,每个叶子节点中的索引行中还包含了一个书签 ( bookmark ) 。 该书签用来告诉 InnoDB 存储引擎哪里可以找到与索引相对应的行数据。每张表上可以有多个辅助索引,通过辅助索引查找数据时, InnoDB 存储引擎会遍历辅助索引并通过叶级别的指针获得指向主键索引的主键,再通过主键索引找到完事的行记录。
 
4、哈希算法
        哈希算法是一种常见算法,时间复杂度为 o(1)。
        4.1、哈希表 ( Hash Table )
                哈希表也称散列表,由直接寻址表改进而来。直接寻址技术存在一个很显的问题,如果域U很大,在一台典型计算机的可用容易限制下,要在机器中存储大小为U的一张表T就有点不实际,甚至是不可能的。因此哈希表出现了。在哈希方式 下,该元素处于 h(k) 中,利用哈希函数h,根据关键字 k计算出槽的位置。
                哈希—碰撞,解决办法:链接法 ( chaining )
                InnoDB 存储引擎使用哈希算法来对字典进行查找,冲突机制采用链表方式,哈希函数采用除法散列方式。对于缓冲池中的 Page 页都有一个 chain 指针,指向相同哈希函数的页。
 
5、全文检索
        B+树索引的特点,可以通过索引字段的前缀进行查找。例如: select * from bolog where content like 'xxx%'
        上述 SQL 语句可以查找博客以内容为 xxx 开头的文章,只要 content 添加了 B+树索引,就能利用索引进行快速查询。但更多的应用场景得支持 '%xxx%' 而B+树索引不支持,InnoDB 提供全文检索支持。
        倒排索引:全文检索通常使用倒排索引 ( inverted index ) 来实现。倒排索引也是一种索引结构。它在辅助表中存储了单词与单词自身在一个或多个文档中所在位置之间的映射。
        
        

InnoDB 存储引擎—索引的更多相关文章

  1. mysql InnoDb存储引擎索引

    B+树索引:使用B+树索引查找数据时,并不能找到一个给定键值的具体行,只是找到被查找数据行所在的页,然后数据库通过把页读取到内存,再在内存中进行查找,最后得到要查找的数据. 聚集索引:按照表中主键构造 ...

  2. MySql的InnoDB存储引擎--索引

    索引分类: 1.聚集索引:索引顺序与物理顺序一致. MySql 的 InnoDB 中,主键索引就是聚集索引.好处是,进行搜索的时候,因为索引和物理顺序一致,所以找数据的时候更快. 2.非聚集索引:索引 ...

  3. 《MySQL技术内幕 InnoDB存储引擎 》学习笔记

    第1章  MySQL体系结构和存储引擎 1.3 MySQL存储引擎 数据库和文件系统最大的区别在于:数据库是支持事务的 InnoDB存储引擎: MySQL5.5.8之后默认的存储引擎,主要面向OLTP ...

  4. 《MySQL技术内幕:InnoDB存储引擎》读书笔记

    一.Mysql体系结构和存储引擎 1. 概念:              数据库:物理操作系统文件或其他形式文件类型的集合.(是文件的集合,是依照某种数据模型组织起来并存放于二级存储器中的数据集合.) ...

  5. MySQL:InnoDB存储引擎的B+树索引算法

    很早之前,就从学校的图书馆借了MySQL技术内幕,InnoDB存储引擎这本书,但一直草草阅读,做的笔记也有些凌乱,趁着现在大四了,课程稍微少了一点,整理一下笔记,按照专题写一些,加深一下印象,不枉读了 ...

  6. InnoDB存储引擎的 B+ 树索引

    B+ 树是为磁盘设计的 m 叉平衡查找树,在B+树中,所有的记录都是按照键值的大小,顺序存放在同一层的叶子节点上,各叶子节点组成双链表.叶节点是数据,非叶节点是索引. 首先,需要清楚:B+ 树索引并不 ...

  7. (转)Mysql技术内幕InnoDB存储引擎-表&索引算法和锁

    表 原文:http://yingminxing.com/mysql%E6%8A%80%E6%9C%AF%E5%86%85%E5%B9%95innodb%E5%AD%98%E5%82%A8%E5%BC% ...

  8. InnoDB存储引擎的B+树索引算法

    关于B+树数据结构 ①InnoDB存储引擎支持两种常见的索引. 一种是B+树,一种是哈希. B+树中的B代表的意思不是二叉(binary),而是平衡(balance),因为B+树最早是从平衡二叉树演化 ...

  9. MySQL技术内幕InnoDB存储引擎(表&索引算法和锁)

    表 4.1.innodb存储引擎表类型 innodb表类似oracle的IOT表(索引聚集表-indexorganized table),在innodb表中每张表都会有一个主键,如果在创建表时没有显示 ...

随机推荐

  1. StringIO 模块用于在内存缓冲区中读写数据

    模块是用类编写的,只有一个StringIO类,所以它的可用方法都在类中.此类中的大部分函数都与对文件的操作方法类似. 例: #coding=gbk import StringIO s=StringIO ...

  2. mongodb 数据导入导出

    mongoexport 命令异常方便简单强大! 连接数据库: jkmiao@jkmiao-ipin:~$ mongo 192.168.1.xx:xxx/jd_58tc_raw 1.  导出10条数据到 ...

  3. cshell学习

    一. 文件的读写执行: 1)读:可以显示该文件的内容 2)写:可以编辑或者删除它 3)执行:如果该文件是一个shell脚本或者程序. 如果希望一次设置目录下所有文件的权限,可使用:chmod 644 ...

  4. centos7 下安装oracle 11g笔记

    终于在vmare的centos7下将oracle11g安装成功了,不容易,将结果记录如下 启动oracle监听及服务的步骤,使用oracle用户登录,执行以下命令 登录到CentOS,切换到oracl ...

  5. make menuconfig 是一个目录。停止 错误解决

    在移植Linux内核时候,发现用 make menuconfig  发生如下错误 linux@ubuntu:/work/linux-socfpga$ make menuconfig make: *** ...

  6. linux mint konsole终端模拟器 字符之间空格

    最近安装了linux mint 发现里面的终端是:konsole终端模拟器 ,问题是每次输字符随着输入字符越来越多,字符与光标之间的距离也越来越大(看上去像是自动添加了空格一样), 同时在使用vi时, ...

  7. HRBUST1530

    链接 http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1530 这个是典型的二分题,题 ...

  8. WebsitePanel(wsp)配置详解(安装指南)

    WebsitePanel(wsp)配置详解(安装指南) 铁卫士原创 估计很多同学都还不知道WebsitePanel是什么东东吧,WebsitePanel简称wsp是微软旗下,开源免费的虚拟主机系统,我 ...

  9. makefile 学习(一)

    一.Makefile的基本规则 GNU make 规则: target ... : prerequisites ...     command     ....     .... target - 目 ...

  10. Android各个文件夹对应的分辨率?