索引类型

MySQL有多种索引类型,使⽤不同的⻆度,分类也有所不同。

功能逻辑角度

普通索引

普通索引是基础的索引,没有任何约束,主要⽤于提⾼查询效率。示例:

CREATE INDEX index_name ON table(column(length))

唯一索引

唯⼀索引就是在普通索引的基础上增加了数据唯⼀性的约束,索引列的值必须唯⼀,允许有NULL值。如果⼀个唯⼀索引同时还是个组合索引,那么表示列值的组合必须唯⼀。在⼀张数据表⾥可以有多个唯⼀索引。示例:

CREATE UNIQUE INDEX index_name ON table(column(length))

主键索引

主键索引是⼀种特殊的唯⼀索引,不允许有NULL值,并且⼀张表最多只有⼀个主键索引。

组合索引

指多个字段上创建的索引,使⽤组合索引时遵循最左前缀原则。示例:

CREATE INDEX index_name ON table (column1,column2)

最左前缀原则,指的是索引按照最左优先的方式匹配索引。如创建了一个组合索引(column1, column2, column3),那么,如果查询条件是:
WHERE column1 = 1、WHERE column1= 1 AND column2 = 2、WHERE column1= 1 AND column2 = 2 AND column3 = 3 都可以使用该索引;

WHERE column1 = 2、WHERE column1 = 1 AND column3 = 3就无法匹配

全文索引

全⽂索引,⽤来检索⽂本中的关键字,⽤得很少,⼀般应对这种需求⽤Elasticsearch或者Solr之类的全文搜索引擎

CREATE FULLTEXT INDEX ……

物理存储角度(聚簇索引、非聚簇索引)

聚簇索引的叶子节点就是数据节点,而非聚簇索引的叶子节点不存储数据,而是指向对应数据块的指针。

InnoDB的主键索引使用的是聚簇索引,而MyISAM使用了非聚簇索引。

  • 表数据和主键一起存储的,聚簇索引的数据的物理存放顺序与索引顺序是一致的,即:只要索引是相邻的,那么对应的数据一定也是相邻地存放在磁盘上的。而由于无法同时把数据行同时存放在两个不同的地方,所以一张表只有一个聚簇索引。

    • 聚簇索引的二级索引:叶子节点不会保存引用的行的物理位置,而是保存行的主键值。
  • 非聚簇索引:叶子节点存储的是数据块的指针。表数据和索引分开存储。查询时,先找到索引,再根据索引找到对应的数据行

聚簇索引 vs 非聚簇索引

聚簇索引优点:

  • 查找效率理论上比非聚簇索引要高,但是插入、修改、删除操作的性能比非聚簇索引要低
  • 范围查询方便

聚簇索引缺点:

  • 插入速度严重依赖于插入顺序,因此,对于InnoDB表,我们一般都会定义一个自增增的ID列为主键
    更新主键的代价很高,因为将会导致被更新的行移动。(当然一般不会更新主键)
  • 聚簇索引增删改操作性能比非聚簇索引性能低

对于InnoDB:

  • 主键使用聚簇索引,并且一张表有且只有1个聚簇索引。如果创建的表没有主键,则InnoDB会隐式定义一个主键来作为聚簇索引。
  • 二级索引(非主键索引)叶子节点存储的是行的主键值,因此使用二级索引命中数据需要查询两次,先用二级索引搜索到主键,再用主键查找数据。

参考内容

  1. 说一下聚簇索引 & 非聚簇索引

MySQL之索引分类相关推荐

  1. 【MySQL进阶-03】深入理解mysql的索引分类,覆盖索引,覆盖索引失效,回表,MRR

    MySql系列整体栏目 内容 链接地址 [一]深入理解mysql索引本质 https://blog.csdn.net/zhenghuishengq/article/details/121027025 ...

  2. Mysql索引分类及其使用实例

    Mysql索引 Mysql的索引分类 单列索引 创建单列索引的几种方式: 唯一索引 创建唯一索引的几种方式: 联合索引(复合索引) 创建联合索引(复合索引)的方式: Mysql的索引类型 INDEX ...

  3. mysql六:索引原理与慢查询优化

    一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...

  4. mysql的索引介绍

    一.索引是什么 mysql 官方对于索引的定义为:索引(Index)是帮助 mysql 高效获取数据的数据结构.可以得到索引的本质:索引是数据结构. 我们可以简单的把索引理解为 "排好序的快 ...

  5. mysql之索引原理与慢查询优化

    一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语 ...

  6. Mysql 索引 总结 —— 概述 || 索引优势劣势|| 索引结构(索引是在MySQL的存储引擎层中实现的)|| BTREE 结构||B+TREE 结构||MySQL中的B+Tree||索引分类

    索引概述 MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序). 在数据之外,数据库系统还维护者满足特定查找算法的数据结构, 这些数据结构以某种方式引用(指向 ...

  7. MySQL索引面试题:优化 索引分类

    索引分类: 主键索引(PRIMARY):它 是一种特殊的唯一索引,不允许有空值. 唯一索引(UNIQUE):与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值. 普通 ...

  8. mysql 复合索引,普通索引,索引分类总结

    对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合 ...

  9. MySQL 高级 - 索引 - 索引分类

    索引分类 1) 单值索引 :即一个索引只包含单个列,一个表可以有多个单列索引 2) 唯一索引 :索引列的值必须唯一,但允许有空值 3) 复合索引 :即一个索引包含多个列

最新文章

  1. ZJU-java进阶笔记 第七周(异常处理)
  2. 试求由a,b,c三个字母组成的n位符号串中不出现aa图像的符号串的数目
  3. 启动PyCharm,提示No Python interpreter selected的问题
  4. 初学__Python——Python数据类型之字典
  5. 迅速掌握Unix编程
  6. 计算机网络复习_第一章
  7. Python AdaBoost提升算法
  8. Facebook推出人脸识别新功能,防止用户肖像遭滥用
  9. 在python中strip_python中strip()函数怎么用?
  10. Linux内核设计与实现---虚拟文件系统
  11. MFC中给单文档程序添加背景图片
  12. 【数据库】Mysql的REPLACE()函数替换字符串
  13. 罗马仕php30重量,充电宝多少毫安最好?这3款罗马仕充电宝必须收藏
  14. python学习视频-2018年最新Python学习路线图(内含大纲+视频+工具)
  15. 6. Zend Studio
  16. mysql介绍索引类型的章节_MySQL索引类型介绍
  17. 股票分析软件 php,哪个股票分析软件最好用?
  18. MQTT 客户端工具
  19. 超过3万Mac已感染 “银麻雀”病毒 最新m1芯片也中招
  20. python3携程_python携程

热门文章

  1. 测试php性能和mysql数据库性能的工具_和找出瓶颈的方法_php面试基础题
  2. 简单探讨JavaScript 与 TypeScript之间的联系
  3. 反射 字段_详解面试中常考的 Java 反射机制
  4. poj2387(Dijstra算法)
  5. 多个tab可以组成一个表单吗 js_11个表单设计小技巧
  6. 使用vtwinfx插件时fcpx意外退出_FCPX插件:60种电视屏幕切换转场 TRANSTELE
  7. mysql ssl_cipher_mysql添加用户:出现Field 'ssl_cipher' doesn't have a defa
  8. 我花了三个小时写了一道题的六千字题解....(POJ 2888 Magic Bracelet)
  9. kuangbin带你飞专题合集
  10. P1944 最长括号匹配(栈模拟/DP)