InnoDB 存储引擎—索引

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 ) 来实现。倒排索引也是一种索引结构。它在辅助表中存储了单词与单词自身在一个或多个文档中所在位置之间的映射。

时间: 2024-10-07 06:33:20

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

Innodb存储引擎索引概述

Innodb存储引擎索引概述 该存储引擎支持两种常见的索引:B+索引.Hash索引. Hash索引 Innodb存储引擎支持的Hash索引是自适应的,引擎会根据表的使用情况自动生成Hash索引,不能人为干预是否在一张表中生成hash索引,Mysql5.5后可以关闭hash索引. B+树索引 B+树索引是目前数据库中最常用的最有效的索引: B+树索引的构造类似于二叉树,根据键值最快的找到数据,B代表balance; B+树索引并不能找到给定键值的所在的行,只能找数据行所在的page,再把page读

MySql的InnoDB存储引擎--索引

索引分类: 1.聚集索引:索引顺序与物理顺序一致. MySql 的 InnoDB 中,主键索引就是聚集索引.好处是,进行搜索的时候,因为索引和物理顺序一致,所以找数据的时候更快. 2.非聚集索引:索引顺序与物理顺序不一致. 非主键索引. 在非主键索引中,又有组合索引(最左索引:也就是查询的时候如果where条件里面没有最左边的一到多列,索引就不会起作用). 区别: 由于聚集索引的有序性,因此十分适合范围查找.当找到相应的范围区间,就直接获取数据.(类比为数组) 由于非聚集索引的索引顺序月物理存储

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

第1章  MySQL体系结构和存储引擎 1.3 MySQL存储引擎 数据库和文件系统最大的区别在于:数据库是支持事务的 InnoDB存储引擎: MySQL5.5.8之后默认的存储引擎,主要面向OLTP(联机事务处理,面向基本的.日常的事务处理) 支持事务,支持外键.支持行锁(有的情况下也会锁住整个表).非锁定读(默认读取操作不会产生锁) 通过使用MVCC来获取高并发性,并且实现sql标准的4种隔离级别,默认为可重复读级别 使用一种被称成next-key locking的策略来避免幻读(phant

mysql innodb存储引擎的聚集索引

InnoDB聚集索引 MySQL有没有支持聚集索引,取决于采用哪种存储引擎. MySQL InnoDB一定会建立聚集索引,所谓聚集,指实际数据行和相关的键值保存在一块,这也决定了一个表只能有一个聚集索引,即MySQL不会一次把数据行保存在二个地方.InnoDB通常根据主键值(primary key)进行聚集,但是当一个表没有PK怎么办?InnoDB选取聚集索引参照列的顺序是: 1.如果声明了主键(primary key),则这个列会被做为聚集索引2.如果没有声明主键,则会用一个唯一且不为空的索引

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

关于B+树数据结构 ①InnoDB存储引擎支持两种常见的索引. 一种是B+树,一种是哈希. B+树中的B代表的意思不是二叉(binary),而是平衡(balance),因为B+树最早是从平衡二叉树演化来的,但是B+树又不是一个平衡二叉树. 同时,B+树索引并不能找到一个给定键值的具体行.B+树索引只能找到的是被查找数据行所在的页.然后数据库通过把页读入内存,再在内存中进行查找,最后得到查找的数据. 再说一下平衡二叉树: 这是一幅平衡二叉树,左子树的值总是小于根的值,右子树的值总是大于根的键值,因

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

很早之前,就从学校的图书馆借了MySQL技术内幕,InnoDB存储引擎这本书,但一直草草阅读,做的笔记也有些凌乱,趁着现在大四了,课程稍微少了一点,整理一下笔记,按照专题写一些,加深一下印象,不枉读了一遍书.与此同时,也加深一下对MySQL的了解,认识了原理,对优化的原则才有把握,对问题的分析才有源头. 关于B+树数据结构 ①InnoDB存储引擎支持两种常见的索引. 一种是B+树,一种是哈希.B+树中的B代表的意思不是二叉(binary),而是平衡(balance),因为B+树最早是从平衡二叉树

InnoDB 存储引擎之索引和优化

数据库优化可以说是后台开发中永恒的话题,数据库的性能通常是整个服务吞吐量的瓶颈之所在. 索引概述InnoDB中的表都是按照主键顺序组织存放的,这种组织方式称之为索引组织表,对比于MyISAM的表组织方式.在InnoDB中每张表都必须有一个主键,如果在创建表的时候没有显式定义主键,则InnoDB首先会判断表中是否有非空的唯一索引,如果有则将该列作为主键:否则InnoDB会自动创建一个6字节大小的指针作为主键.除主键之外,InnoDB还可以有辅助索引,而辅助索引页中仅仅存放键值和指向数据页的偏移量,

关于InnoDB存储引擎text和blob类型的优化

我们在数据库优化的时候,看到一些表在设计上使用了text或者blob的字段,如果单表的存储空间达到了近上百G或者大几十G,这种情况再去改变和优化就非常难了 一.简介 为了清楚大字段对性能的影响,我们有必要知道innodb存储引擎的处理方式: 1.一些知识点 1.1 在InnoDB 1.0.x版本之前,InnoDB 存储引擎提供了 Compact 和 Redundant(Redundant 格式是为兼容之前版本而保留的) 两种格式来存放行记录数据,compact 和 redundant 合称为An

MySQL技术内幕-InnoDB存储引擎-读书笔记(二)

MySQL技术内幕-InnoDB存储引擎-读书笔记(二) 作为php开发,使用mysql总是少不了的 系列文章博客链接 http://itsong.net/articles/466.html 第三章 文件 mysql与innodb几个类型的文件 参数文件,配置路径.初始化参数.内存大小等 日志文件,包括错误日志,二进制日志,慢查询日志,查询日志 socket文件,用unix域套接字,unix domain socket来进行连接时需要的文件,这一般是本机连接,比通常tcp快 pid文件,进程id