按数据结构

  • 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 索引分类的更多相关文章

  1. mysql 索引分类以及用途分析

    MySQL索引分为普通索引.唯一性索引.全文索引.单列索引.多列索引等等.这里将为大家介绍着几种索引各自的用途. 一. MySQL: 索引以B树格式保存 Memory存储引擎可以选择Hash或BTre ...

  2. mysql索引分类

    mysql索引分类 一.总结 一句话总结: 主键索引:设定为主键后数据库会自动建立索引,innodb为聚簇索引 单值索引:一个索引只包含单个列,一个表可以有多个单列索引:CREATE INDEX id ...

  3. mysql索引分类及实现原理

    索引分类:主键索引.唯一索引.普通索引.全文索引.组合索引 1.主键索引:即主索引,根据主键pk_clolum(length)建立索引,不允许重复,不允许空值 ALTER TABLE 'table_n ...

  4. MySQL索引分类及相关概念辨析

    本文链接:https://www.cnblogs.com/ibigboy/p/16198243.html 之前的一篇<MySQL索引底层数据结构及原理深入分析>很受读者欢迎,成功地帮大家揭 ...

  5. mysql 索引分类

    在数据库表中,对字段建立索引可以大大提高查询速度.通过善用这些索引,可以令 MySQL的查询和运行更加高效.索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常 ...

  6. mysql索引分类及注意事项

    MYSQL索引主要分为四类:主键索引,普通索引(聚合,非聚合),唯一索引,全文索引 全文索引,主要是针对对文件,文本的检索, 比如文章, 全文索引针对MyISAM有用. 索引的原理:利用二叉树(哈希表 ...

  7. Mysql索引分类和索引优化

    一. MySQL: 索引以B树格式保存 Memory存储引擎可以选择Hash或BTree索引,Hash索引只能用于=或<=>的等式比较. 1.普通索引:create index on Ta ...

  8. MySQL索引分类和各自用途

    一. MySQL: 索引以B树格式保存 Memory存储引擎可以选择Hash或BTree索引,Hash索引只能用于=或<=>的等式比较. 1.普通索引:create index on Ta ...

  9. MySQL索引的分类、结构、使用场景

    MySQL索引分类 1.主键索引:设定为主键后数据库会自动建立索引,innodb为聚簇索引 语法: 随表一起建索引: CREATE TABLE customer (id INT(10) UNSIGNE ...

随机推荐

  1. .net 预处理指令符的使用

    目录 什么是预处理指令符? 预处理指令符的使用 自定义指令符 使用Visual Studio快速定义指令符 定义指令符区域 什么是预处理指令符? 当C#编译器找到一条预处理指令#if,最后找到一条指令 ...

  2. 使用SignalR ASP.NET Core来简单实现一个后台实时推送数据给Echarts展示图表的功能

    什么是 SignalR ASP.NET Core ASP.NET Core SignalR 是一种开放源代码库,可简化将实时 web 功能添加到应用程序的功能. 实时 web 功能使服务器端代码可以立 ...

  3. 一起来看Java设计思想之23种设计模式

    目录 怎么使用设计模式 23种设计模式 创建型模式 结构型模式 行为型模式 总结 怎么使用设计模式 为什么要使用设计模式? 编写代码,写接口.写类.写方法 用设计模式做设计的作用是什么? 指导.规定如 ...

  4. @valid和自定义异常

    @valid和自定义异常 问题的产生: 当有很多参数需要校验时,比如name,age,email等很多参数都需要判空,或者有长度限制时,如果后端写很多if-else就有很多代码,不美观,不优雅.前端每 ...

  5. (数据科学学习手札119)Python+Dash快速web应用开发——多页面应用

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

  6. SpringBoot自动装配源码

    前几天,面试的时候被问到了SpringBoot的自动装配的原理.趁着五一的假期,就来整理一下这个流程. 我这里使用的是idea创建的最简单的SpringBoot项目. 我们都知道,main方法是jav ...

  7. hdu1316 水大数

    题意:      给你一个区间,问这个区间有多少个斐波那契数. 思路:      水的大数,可以直接模拟,要是懒可以用JAVA,我模拟的,打表打到1000个就足够用了... #include<s ...

  8. hdu4280 最大流DINIC

    题意:       x最小的到x最大的点同一时间的最大运输量. 思路:       裸的最大流,不解释,注意一点,记得加上防爆栈. #pragma comment(linker, "/STA ...

  9. hdu3018 一笔画问题

    题意:       给你一幅画,这幅画由点和边构成,问你最少几笔能把这幅画画完. 思路:      这个题目的结论比较巧妙,首先我们考虑下,如果给的图是欧拉图,或者是条欧拉回路,那么我们一笔就搞定了, ...

  10. 手脱ASPack2.12壳(练习)

    俗话说柿子挑软的捏,练习脱壳还得用加密壳脱 0x01 准备 1.OD 2.ASPack加壳软件 0x02 脱壳实战 查一下壳 OD载入 第一个call,F7进去 第二个call也是F7进去 之后往下单 ...