按数据结构

  • 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. RabbitMQ 入门 (Go) - 5. 使用 Fanout Exchange 做服务发现(下)

    到目前为止,我一直专注于如何让消息进出消息代理,也就是RabbitMQ. 实际上,我们可以继续使用 RabbitMQ 和它的 Exchanges 来连接这个应用程序的其他部分,但是我想探索一个稍微不同 ...

  2. JWT 介绍 - Step by Step

    翻译自 Mohamad Lawand 2021年3月11日的文章 <Intro to JWT - Step by Step> [1] 在本文中,我将向您介绍 JWT[2]. 我们今天要讲的 ...

  3. Kubernetes 学习笔记-- kafka往couchdb里倒东西

    首先吐槽下国内这些论坛的技术精神,不是我崇洋媚外,有些复读机烦不烦啊,别人的东西吃进去吐出来好玩么? 还有一些不懂装懂,这种最可恶,明明自己都不明白自己在写什么,还是往精华区发,简直离谱,知道自己多挣 ...

  4. 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作centos6.5-14

    自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作centos6.5-14 欢迎加QQ群:1026880196 进行交流学习 制作OpenSta ...

  5. 如何查看spark版本

    使用spark-shell命令进入shell模式

  6. 11. VUE 数组操作

    变异方法 Vue 包含一组观察数组的变异方法,所以它们也将会触发视图更新.这些方法如下: push() 添加元素 <ul id="example-1"> <li ...

  7. 17. Vue2.4+新增属性$listeners

    现在我们来讨论一种情况,A组件与C组件怎么通信,我们有多少种解决方案? 我们使用VueX来进行数据管理,但是如果项目中多个组件共享状态比较少,项目比较小,并且全局状态比较少,那使用VueX来实现该功能 ...

  8. linux中[gcc -shared -fPIC]的含义

    linux在gcc编译时加上 -shared 参数时,目的是使源码编译成动态库 .so 文件: 而-fPIC的作用是 告知编译器 生成位置无关代码(编译产生的代码没有绝对位置,只有相对位置):从而可以 ...

  9. shellcode 开发

    0x00 设置堆栈 栈顶指针按位与之后,将栈桢以16字节的大小对齐: push rbp ;store rbp original state mov rbp, rsp ;set stack base p ...

  10. (转)Amazon Aurora MySQL 数据库配置最佳实践

    转自:https://zhuanlan.zhihu.com/p/165047153 Amazon Aurora MySQL 数据库配置最佳实践 AWS云计算 ​ 已认证的官方帐号 1 人赞同了该文章 ...