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. WPF NotifyIcon and Taskbar 任务栏示例

    Demo Source 转自:http://www.codeproject.com/Articles/36788/WPF-XAML-NotifyIcon-and-Taskbar-System-Tray ...

  2. Bootstrap配套的js框架

    求几个搭配bootstrap的js框架.实现如表单验证,文件多传下载等等 Bootstrap File Input文件选择控件: PNotify通知插件: ClockPicker时间拾取器: Boot ...

  3. CRM IFRAME 显示地图

    作者:卞功鑫  ,转载请保留.http://www.cnblogs.com/BinBinGo/p/5274409.html 需要背景: 现在已经有经纬度,需要在地图上显示出来. 环境: CRM 4.0 ...

  4. [SQL]断开并更改数据库名

    EXEC sp_dboption 'my', 'Single User', 'TRUE' EXEC sp_renamedb 'my', 'mycrjtest' EXEC sp_dboption 'my ...

  5. (medium)LeetCode 210.Course Schedule II

    There are a total of n courses you have to take, labeled from 0 to n - 1. Some courses may have prer ...

  6. [HDU 4747] Mex (线段树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4747 这道题是我去年刚入校队的时候参加网赛的题目. 一年过去了,我依然还是不会做.. 这是我难题计划的 ...

  7. StrictMode对SharedPreferences的检查出来的IO操作

    在使用StrictMode时,发现会爆出 StrictMode policy violation;~duration=1949 ms: android.os.StrictMode$StrictMode ...

  8. 如何隐藏storyboard中的top bar

    在navigation bar中是没有设置它的隐藏和显示的属性的 那么究竟在什么地方呢,当在它自身的属性中没有找到的情况下,那么就只能去包含它的容器中去寻找了,结果果然找到了.在view的第四个选择器 ...

  9. Java中List转数组,必须带个参数

    public static void main(String[] args) { List<String> lst = new ArrayList(); lst.add("赵云 ...

  10. Android API 中文 ListView

    正文 一.结构 public class RatingBar extends AbsSeekBar java.lang.Object android.view.View android.view.Vi ...