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. 全文索引
全文索引查找的是文本中的关键词,不是直接比较索引中的值。
- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
mysql索引类型(按存储结构划分)的更多相关文章
- Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构
Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构 1. 索引的分类1 1.1. 按照存储结构划分btree,hash,bitmap,fulltext1 1.2. 索引的类型 按查找 ...
- [转]MySQL索引类型
此为转载文章,仅做记录使用,方便日后查看,原文链接:https://www.cnblogs.com/luyucheng/p/6289714.html MySQL索引类型 一.简介 MySQL目前主 ...
- MySQL索引类型及优化
索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytabl ...
- MYSQL索引类型。MYSQLc储存引擎
MYSQL索引类型,MYSQLc储存引擎 MySQL索引创建与删除 MySQL存储引擎的 ...
- MySQL索引类型总结和使用技巧以及注意事项
索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable ...
- mysql索引类型和索引方法
索引类型 mysql索引类型normal,unique,full text的区别是什么? normal:表示普通索引 unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号 ...
- MYSQL 索引类型、什么情况下用不上索引、什么情况下不推荐使用索引
mysql explain的使用: http://blog.csdn.net/kaka1121/article/details/53394426 索引类型 在数据库表中,对字段建立索引可以大大提高查询 ...
- mysql进阶(二十六)MySQL 索引类型(初学者必看)
mysql进阶(二十六)MySQL 索引类型(初学者必看) 索引是快速搜索的关键.MySQL 索引的建立对于 MySQL 的高效运行是很重要的.下面介绍几种常见的 MySQL 索引类型. 在数 ...
- mysql索引类型 normal, unique, full text
问题1:mysql索引类型normal,unique,full text的区别是什么? normal:表示普通索引 unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用 ...
随机推荐
- Java 获取当前日期的几种方法
import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import ja ...
- 201771010126.王燕《面向对象程序设计(Java)》第六周学习总结
实验六 继承定义与使用 实验时间 2018-9-28 1.实验目的与要求 (1) 理解继承的定义: 继承就是用已有类来构建新类的一种机制,当你继承了一个类时,就继承了这个类的方法和字段,同时你也可以在 ...
- [LeetCode] Largest Sum of Averages 最大的平均数之和
We partition a row of numbers A into at most K adjacent (non-empty) groups, then our score is the su ...
- pytorch安装(使用pip3装到conda环境下)
之前在windows上使用pip3的方式安装过pytorch,虽然偶尔也会HTTP Error,安装失败,但是基本还是可以安装成功的.上 这一次在ubuntu上装了anaconda,想着之后的库都用c ...
- hadoop本地开发环境搭建
1:下载hadoop2.7.3并解压 2:配置hadoop2.7.3环境变量 HADOOP_HOME %HADOOP_HOME%\bin 3:下载hadoop-eclipse-plugin插件 网址: ...
- 将整数m的各位数字保存到数组A中
import java.util.Scanner; /** * @author:(LiberHome) * @date:Created in 2019/3/4 20:10 * @description ...
- Axure软件界面及元件
Axure 软件的需求史 功能:用来制作快速原型的软件.也可以绘制中保真原型草图. (适用人群:产品经理,交互设计师,UI设计师,网页设计师, 想要自己提升的人[重]) 原型分类: 低保真原型(草图) ...
- kafka创建topics 错误: 找不到或无法加载主类 Files\Java\jdk1.7.0_80\lib;C:\Program
解决方案如下: 在kafka安装目录中找到bin\windows目录中的kafka-run-class.bat找到%CLASSPATH%为其加上双引号
- 浅谈 R_S触发器
1.. 1.要点 就是S R端谁是0谁就掌握了绝对权力,因为与门的缘故. 对于上图 S在左边,所以只要S是0 ,Q必定是1.另外对于R 只要R是0,Q非才能是1,q非又是S端的关键与信号,所以只有R为 ...
- UIPullRefreshFlash模块demo示例
UIPullRefreshFlash 模块概述:UIPullRefreshFlash模块对引擎新推出的下拉刷新接口进行了一层封装,app可以通过此模块来实现带炫酷动画效果的下拉刷新功能.使用此模块,在 ...