mysql索引类型(按存储结构划分)
关于mysql索引类型,网上有很多相关的介绍,给人的感觉很乱。鄙人在翻阅相关书籍后,特意梳理了一下。哪里有不对的地方,欢迎指正!
1. B-Tree索引
它使用B-Tree数据结构来存储数据,实际上很多存储引擎使用的是B+Tree。B+Tree和B-Tree的不同点在于:
(1) 非叶子节点只存储键值信息
(2) 所有叶子节点之间都有链指针
(3) 数据记录都存放在叶子节点中
B-Tree模型:
B+Tree模型:
B-Tree对索引列是顺序组织存储的,很适合查找范围数据。看下B-Tree索引适用哪些查询:
(1) 全值匹配
全值匹配是指查询中使用的条件和索引中的所有列进行匹配。比如有索引 index(last_name, first_name, date) ,查询的条件为:where last_name=? and first_name=? and date=? 。
(2) 匹配最左前缀
只使用索引的第一列。比如查询条件为:where last_name = ?
(3) 匹配列前缀
只匹配某一列值得开头部分。
(4) 匹配范围值
(5) 精确匹配某一列并范围匹配另一列
比如:where last_name = ? and first_name like kim%
(6) 只访问索引的查询
2. 哈希索引
哈希索引基于哈希表实现。哈希索引将所有的哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针。在mysql中,Memory引擎显式支持哈希索引。
举例说明,有张表:
CREATE TABLE testhash (
fname VARCHAR(50) NOT NULL,
lname VARCHAR(50) NOT NULL,
KEY USING HASH(fname)
) ENGINE=MEMORY;
表中有如下数据:
fname | lname |
Arjen | Lentz |
Baron | Schwartz |
Peter | Zaitsev |
Vadim | Tkachenko |
假设索引使用假想的哈希函数f(), 如下:
f('Arjen') = 2323
f('Baron') = 7437
f('Peter') = 8784
f('Vadim') = 2458
那么哈希索引的数据结构:
槽(Slot) 值(Value)
2323 指向第1行的指针
2458 指向第4行的指针
7437 指向第2行的指针
8784 指向第3行的指针
如果使用一条sql语句进行查询:select lname from testhash where fname = 'Peter'; 过程为:
计算‘Peter’的哈希值(f('Peter')=8784)----->查找哈希值对应的指针----->根据指针或得相应的数据。
哈希索引的特点:索引的结构十分紧凑,因此查找速度非常快;哈希索引数据不是按照索引顺序存储的,无法用于排序;哈希索引不支持部分索引列匹配查找;哈希索引只支持等值比较查询(=,IN(),<=>),不支持范围查询,如where price>100;
3. 全文索引
全文索引查找的是文本中的关键词,不是直接比较索引中的值。
- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
转载于:https://www.cnblogs.com/lty-fly/p/10691266.html
- 点赞
- 收藏
- 分享
- 文章举报
- MySQL索引结构类型划分
- mysql系列之2------数据类型,索引,键,存储引擎
- MySQL高阶之事务、存储结构、索引、触发器
- Mysql InnoDB引擎的索引与存储结构详解
- mysql索引类型、primary key 主键 使用规则、mysql存储引擎、mysql服务的工作过程
- MySql Blob图片类型存储Bug解决:索引超出了数组界限错误
- MYSQL优化(二):索引优化、存储引擎优化、表结构优化等
- 14-mysql索引类型与数据存储
- mysql的存储引擎类型和索引类型
- mysql中常见的存储引擎和索引类型
- 运维之mysql篇------2. MySQL 索引类型 、 MySQL 存储引擎
- 02: MySQL 索引类型 、 MySQL 存储引擎
- MySQL基础day02_表结构和索引类型-MySQL 5.6
- 亲测Mysql表结构为InnoDB类型从ibd文件恢复数据
- MySQL索引类型一览 让MySQL高效运行起来
- mysql存储文件,用什么类型
- MySQL里创建索引(Create Index)的方法和语法结构及例子,
- mysql 数据和索引的存储关系
- 简单介绍下MYSQL的索引类型
- mysql索引总结----mysql 索引类型以及创建