mysql索引总结

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • [1 索引分类维度](#1 索引分类维度)
  • [2 存储形式](#2 存储形式)
    • [2.1 聚簇索引](#2.1 聚簇索引)
    • [2.2 非聚簇索引](#2.2 非聚簇索引)
  • [3 数据约束](#3 数据约束)
  • [4 索引列的数量](#4 索引列的数量)
  • [5 innoDB可以创建的索引](#5 innoDB可以创建的索引)
  • [6 innoDB不可以创建的索引](#6 innoDB不可以创建的索引)
  • 总结

提示:以下是本篇文章正文内容,下面案例可供参考

1 索引分类维度

  • 存储形式
  • 数据约束
  • 索引列的数量
  • innoDB可以创建的索引

2 存储形式

  • 聚簇索引
  • 非聚簇索引

2.1 聚簇索引

简单讲,聚簇索引就是主键索引,按照主键索引到叶节点的时候,叶节点包含了所有列数据。

聚集索引表记录的排列顺序和索引的排列顺序一致(以InnoDB聚集索引的主键索引来说,叶子节点中存储的就是行数据,行数据在物理储器中的真实地址就是按照主键索引树形成的顺序进行排列的),所以查询效率快,只要找到第一个索引值记录,其余就连续性的记录在物理也一样连续存放。聚集索引对应的缺点就是修改慢,因为为了保证表中记录的物理和索引顺序一致,在记录插入的时候,会对数据页重新排序(因为在真实物理存储器的存储顺序只能有一种,而插入新数据必然会导致主键索引树的变化,主键索引树的顺序发生了改变,叶子节点中存储的行数据也要随之进行改变,就会发生大量的数据移动操作,所以效率会慢)。因为在物理内存中的顺序只能有一种,所以聚集索引在一个表中只能有一个。

2.2 非聚簇索引

非聚集索引制定了表中记录的逻辑顺序,但是记录的物理和索引不一定一致(在逻辑上数据是按顺序排存放的,但是物理上在真实的存储器中是散列存放的),两种索引都采用B+树结构,非聚集索引的叶子层并不和实际数据页相重叠,而采用叶子层包含一个指向表中的记录在数据页中的指针方式。非聚集索引层次多,不会造成数据重排。所以如果表的读操作远远多于写操作,那么就可以使用非聚集索引。

3 数据约束

  • 主键索引
  • 唯一索引
  • 非唯一索引

4 索引列的数量

  • 单列索引
  • 组合索引

5 innoDB可以创建的索引

  • 主键索引
  • 唯一索引
  • 普通索引

6 innoDB不可以创建的索引

覆盖索引

覆盖索引是指由于使用了组合索引,当根据某些列检索时可以在组合索引中检索到所有需要的数据,不需要再回表。

explain的时候Extra里如果是Using index,说明使用了覆盖索引,没有回表。


总结

相关推荐
码农小站1 小时前
ClickHouse 时间范围查询:精准筛选「本月数据」
数据库
paopaokaka_luck1 小时前
基于SpringBoot+Vue的非遗文化传承管理系统(websocket即时通讯、协同过滤算法、支付宝沙盒支付、可分享链接、功能量非常大)
java·数据库·vue.js·spring boot·后端·spring·小程序
小疯仔2 小时前
navicat导出数据库的表结构
数据库
TOSUN同星2 小时前
干货分享 | TSMaster DBC编辑器操作指南:功能详解+实战示例
数据库·oracle·编辑器·汽车·软件工程
huihui4503 小时前
一天一道Sql题(day01)
数据库
~尼卡~3 小时前
软考(软件设计师)数据库原理:事务管理,备份恢复,并发控制
数据库·软件设计师-软考
八九燕来3 小时前
Django双下划线查询
数据库·django·sqlite
眠りたいです3 小时前
Mysql常用内置函数,复合查询及内外连接
linux·数据库·c++·mysql
paopaokaka_luck4 小时前
智能推荐社交分享小程序(websocket即时通讯、协同过滤算法、时间衰减因子模型、热度得分算法)
数据库·vue.js·spring boot·后端·websocket·小程序
M1A14 小时前
Java 面试系列第一弹:基础问题大盘点
java·后端·mysql