MySQL-索引

什么是索引

索引(index)是帮助MysQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构(B+树),这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

聚集索引和非聚集索引(二级索引)

聚集索引(Clustered Index)

含义:将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据

特点:必须有,而且只有一个

聚集索引选取规则:

  • 如果存在主键,主键索引就是聚集索引。
  • 如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引。
  • 如果表没有主键,或没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索引。

非聚集索引(Secondary Index)

含义:将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键

特点:可以存在多个

回表查询

含义:通过二级索引找到对应的主键值,然后再通过主键值找到聚集索引中所对应的整行数据,这个过程就是回表

覆盖索引

含义:覆盖索引是指查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到。

简单来说就是不需要回表查询的索引

MYSQL超大分页处理

在数据量比较大时,如果进行limit分页查询,在查询时,越往后,分页查询效率越低。

执行limit分页查询耗时对比:

因为,当在进行分页查询时,如果执行limit 9000000,10,此时需要MySQL排序前9000010记录,仅仅返回9000000 - 9000010的记录,其他记录丢弃,查询排序的代价非常大。

优化思路

一般分页查询时,通过创建覆盖索引能够比较好地提高性能,可以通过覆盖索引子查询形式进行优化

创建索引的原则

索引失效情况

  • 违反最左前缀法则
  • 范围查询右边的列,不能使用索引
  • 在索引列上进行运算操作或者类型转换 ,索引将失效
  • 以%开头的Like模糊查询,索引失效。如果仅仅是尾部模糊匹配,索引不会失效。如果是头部模糊匹配,索引失效。

例表:

违反最左前缀法则

如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始,并且不跳过索引中的列。匹配最左前缀法则,走索引:

范围查询右边的列,不能使用索引

根据前面的两个字段name ,status查询是走索引的,但是最后一个条件address没有用到索引。

在索引列上进行运算操作或者类型转换

以%开头的Like模糊查询

如果仅仅是尾部模糊匹配,索引不会失效。

总结

相关推荐
小生凡一3 分钟前
redis 大key、热key优化技巧|空间存储优化|调优技巧(一)
数据库·redis·缓存
oe10193 分钟前
好文与笔记分享 A Survey of Context Engineering for Large Language Models(上)
数据库·笔记·语言模型·agent·上下文工程
小马哥编程6 分钟前
【软考架构】案例分析-对比MySQL查询缓存与Memcached
java·数据库·mysql·缓存·架构·memcached
一 乐8 分钟前
高校后勤报修系统|物业管理|基于SprinBoot+vue的高校后勤报修系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·毕设
折翼的恶魔35 分钟前
SQL190 0级用户高难度试卷的平均用时和平均得分
java·数据库
煎蛋学姐1 小时前
SSM基于框架在线电影评论投票系统3gr0f(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·系统开发·ssm 框架·在线电影评论投票系统
꒰ঌ 安卓开发໒꒱1 小时前
Go高并发在企业级项目中的实战应用:数据库访问与GIN+GORM深度实践
数据库·golang·gin
半夏知半秋1 小时前
mongodb的复制集整理
服务器·开发语言·数据库·后端·学习·mongodb
程序员柳2 小时前
基于深度学习技术实现染色质开放区域的预测与分析系统源代码+数据库,采用Flask + Vue3 实现前后端分离的植物染色质可及性预测系统
数据库·深度学习·flask
苦学编程的谢2 小时前
Redis_3_Redis介绍+常见命令
数据库·redis·github