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. Jmeter html 报告中添加90% line time

    转载南风_real博客园:http://www.cnblogs.com/jaychang/p/5784882.html 首先上效果图: 其次明白几个原理: 90% Line的意思是:一组数由小到大进行 ...

  2. tomcat服务器不输出访问日志

    有时候一个WEB服务作为接口部署在tomcat下,因为访问很频繁,导致/var/log/tomcat7下的访问日志急剧膨胀,影响服务器的性能. 在这里我的方法是关闭访问日志,关闭方法为将访问日志的输出 ...

  3. PXE批量部署linux操作系统

    前言 在实际生产环境中,有时候我们会碰到为几十上百甚至上千台服务器安装Linux操作系统的需求,如果我们还是常规的去使用移动介质逐台安装,显然是一件低效又令人抓狂的事情,那要安装到何年何月啊?这对于我 ...

  4. 移动应用(手机应用)开发IM聊天程序解决方案

    这个解决方法已经定制下来很久了,上一段时间比较忙,没有时间整这些东西.最近稍微好些,不怎么加班.所以抽空总结下,同时也分享给大家,也算是给大家一个借鉴吧!或许这并不是最好的解决方案,但只要能满足当前需 ...

  5. 自己动手搭建 Redis 环境,并建立一个 .NET HelloWorld 程序测试(转)

    关于 Redis ,下面来自百度百科: redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set( ...

  6. 服务器安装MongoDB

    1.下载MongoDB安装包,如:mongodb-win32-i386-1.8.1.zip: 2.新建目录“D:\MongoDB”,将安装中的bin目录下全部.exe文件复制到“D:\MongoDB” ...

  7. C++学习36 string类和字符串

    C++大大增强了对字符串的支持,除了可以使用C风格的字符串,还可以使用内置的数据类型 string.string 类处理起字符串来会方便很多,完全可以代替C语言中的 char 数组或 char 指针. ...

  8. java io InputStream 转 byte

    InputStream is ; ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] b = new byte[1024] ...

  9. glctx.ClearColor 参数说明

    glctx.ClearColor 的参数信息如下: // ClearColor specifies the RGBA values used to clear color buffers. // // ...

  10. 巧用Freemarker的自定义方法

    要想使用Freemarker支持的自定义方法,需要实现freemarker.template.TemplateMethodModel接口,然后将方法对象放入到Freemarker的数据模型中,这样在f ...