[DB] MySQL 索引分类
按数据结构
- B树索引
- 数据位于叶子节点,到任何一个叶子节点的距离相同,一般不超过3-4层
- B+树索引:每个叶子节点除了数据还存放前后叶子节点的指针,方便快速检索,是InnoDB采用的索引结构
- Hash索引
- 对数据建立Hash表,数据本身无序存储
- LSM树索引
- 所有写操作先进入内存中的分段,排序合并后写入硬盘
- Fulltext索引
- R树索引
- 用于索引空间信息
按实现方式
- 聚集索引(聚簇索引)
- 叶子节点存放数据
- 优点:按主键排序存储数据,查询效率高
- 缺点:
- 插入速度严重依赖插入顺序,按主键顺序插入最快,否则会出现页分裂影响性能
- 插入、删除、更新效率低
- 通过二级索引访问需要两次索引查找(主键-->行数据)
- 非聚集索引(非聚簇索引)
- 不影响数据表的物理存储顺序
- 叶子节点存储主键值,或指向数据的指针
- 访问数据需要二次查找,第一次找到主键值,第二次根据主键值找到数据
按功能
- 普通索引:用于提高查询效率,没有约束
- 唯一索引:在普通索引基础上,增加数据唯一性的约束,一张表里可以有多个
- 主键索引:在唯一索引基础上,增加了不为空的约束,一张表里最多只有一个
- 全文索引:ES和Solr
按字段个数
- 单一索引:索引列为一列
- 联合索引:索引列为多列
按对应键
- 主键索引
- 对主键创建的索引
- 叶子节点只能按一棵B+树排序,故一张表只能有一个
- InnoDB下是聚簇索引,MyISAM下是非聚簇索引
- 辅助键索引(二级索引)
- 对非主键创建的索引
- 一张表可以有多个
按存储引擎
- InnoDB
- 主索引:保存数据,key是表的主键
- 辅助索引:记录主键的值而不是地址
- 实现方式:聚集索引(数据和索引在一起)
- MyISAM
- 主索引:索引和数据分离,索引叶子节点仅保存数据地址
- 辅助索引:和主索引无区别
- 实现方式:非聚集索引(数据和索引不在一起)
参考
https://www.cnblogs.com/jiawen010/p/11805241.html
https://www.jianshu.com/p/fa8192853184
[DB] MySQL 索引分类的更多相关文章
- mysql 索引分类以及用途分析
MySQL索引分为普通索引.唯一性索引.全文索引.单列索引.多列索引等等.这里将为大家介绍着几种索引各自的用途. 一. MySQL: 索引以B树格式保存 Memory存储引擎可以选择Hash或BTre ...
- mysql索引分类
mysql索引分类 一.总结 一句话总结: 主键索引:设定为主键后数据库会自动建立索引,innodb为聚簇索引 单值索引:一个索引只包含单个列,一个表可以有多个单列索引:CREATE INDEX id ...
- mysql索引分类及实现原理
索引分类:主键索引.唯一索引.普通索引.全文索引.组合索引 1.主键索引:即主索引,根据主键pk_clolum(length)建立索引,不允许重复,不允许空值 ALTER TABLE 'table_n ...
- MySQL索引分类及相关概念辨析
本文链接:https://www.cnblogs.com/ibigboy/p/16198243.html 之前的一篇<MySQL索引底层数据结构及原理深入分析>很受读者欢迎,成功地帮大家揭 ...
- mysql 索引分类
在数据库表中,对字段建立索引可以大大提高查询速度.通过善用这些索引,可以令 MySQL的查询和运行更加高效.索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常 ...
- mysql索引分类及注意事项
MYSQL索引主要分为四类:主键索引,普通索引(聚合,非聚合),唯一索引,全文索引 全文索引,主要是针对对文件,文本的检索, 比如文章, 全文索引针对MyISAM有用. 索引的原理:利用二叉树(哈希表 ...
- Mysql索引分类和索引优化
一. MySQL: 索引以B树格式保存 Memory存储引擎可以选择Hash或BTree索引,Hash索引只能用于=或<=>的等式比较. 1.普通索引:create index on Ta ...
- MySQL索引分类和各自用途
一. MySQL: 索引以B树格式保存 Memory存储引擎可以选择Hash或BTree索引,Hash索引只能用于=或<=>的等式比较. 1.普通索引:create index on Ta ...
- MySQL索引的分类、结构、使用场景
MySQL索引分类 1.主键索引:设定为主键后数据库会自动建立索引,innodb为聚簇索引 语法: 随表一起建索引: CREATE TABLE customer (id INT(10) UNSIGNE ...
随机推荐
- .net 预处理指令符的使用
目录 什么是预处理指令符? 预处理指令符的使用 自定义指令符 使用Visual Studio快速定义指令符 定义指令符区域 什么是预处理指令符? 当C#编译器找到一条预处理指令#if,最后找到一条指令 ...
- 使用SignalR ASP.NET Core来简单实现一个后台实时推送数据给Echarts展示图表的功能
什么是 SignalR ASP.NET Core ASP.NET Core SignalR 是一种开放源代码库,可简化将实时 web 功能添加到应用程序的功能. 实时 web 功能使服务器端代码可以立 ...
- 一起来看Java设计思想之23种设计模式
目录 怎么使用设计模式 23种设计模式 创建型模式 结构型模式 行为型模式 总结 怎么使用设计模式 为什么要使用设计模式? 编写代码,写接口.写类.写方法 用设计模式做设计的作用是什么? 指导.规定如 ...
- @valid和自定义异常
@valid和自定义异常 问题的产生: 当有很多参数需要校验时,比如name,age,email等很多参数都需要判空,或者有长度限制时,如果后端写很多if-else就有很多代码,不美观,不优雅.前端每 ...
- (数据科学学习手札119)Python+Dash快速web应用开发——多页面应用
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...
- SpringBoot自动装配源码
前几天,面试的时候被问到了SpringBoot的自动装配的原理.趁着五一的假期,就来整理一下这个流程. 我这里使用的是idea创建的最简单的SpringBoot项目. 我们都知道,main方法是jav ...
- hdu1316 水大数
题意: 给你一个区间,问这个区间有多少个斐波那契数. 思路: 水的大数,可以直接模拟,要是懒可以用JAVA,我模拟的,打表打到1000个就足够用了... #include<s ...
- hdu4280 最大流DINIC
题意: x最小的到x最大的点同一时间的最大运输量. 思路: 裸的最大流,不解释,注意一点,记得加上防爆栈. #pragma comment(linker, "/STA ...
- hdu3018 一笔画问题
题意: 给你一幅画,这幅画由点和边构成,问你最少几笔能把这幅画画完. 思路: 这个题目的结论比较巧妙,首先我们考虑下,如果给的图是欧拉图,或者是条欧拉回路,那么我们一笔就搞定了, ...
- 手脱ASPack2.12壳(练习)
俗话说柿子挑软的捏,练习脱壳还得用加密壳脱 0x01 准备 1.OD 2.ASPack加壳软件 0x02 脱壳实战 查一下壳 OD载入 第一个call,F7进去 第二个call也是F7进去 之后往下单 ...