【MySQL】索引相关

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 面试官:我们简单聊一下mysql索引相关东西吧。不了解是吧,行,那我们今天面试先到这。感谢参加本次面试哈

MySQL系列文章


索引结构

首先要理解索引是什么,索引是一个特殊的数据结构简单理解成一本书的书签,当一张表建立索引时磁盘中也会存储一个独立的索引结构,通过建立的树状结构查询。这里为什么能加速查询也就显而易见了,树状查询比列表查询快很多。


索引存储在磁盘中的数据结构为B+树,本质上为一个多叉树,类似下图这样,仅有叶子节点存储数据。

image.png


索引逻辑结构类型


从逻辑结构上划分为聚簇索引非聚簇索引。

聚簇索引

  • 聚簇索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据。这个特性决定了索引组织表中数据也是索引的一部分,每张表只能拥有一个聚簇索引。
  1. 优点:数据访问更快,因为聚簇索引将索引和数据保存在同一个B+树中,因此从聚簇索引中获取数据比非聚簇索引更快,聚簇索引对于主键的排序查找和范围查找速度非常快
  2. 缺点:
  1. 插入速度严重依赖于插入顺序,按照主键的顺序插入是最快的方式,否则将会出现页分裂,严重影响性能。因此,对于InnoDB表,我们一般都会定义一个自增的ID列为主键
  2. 更新主键的代价很高,因为将会导致被更新的行移动。因此,对于InnoDB表,我们一般定义主键为不可更新。
  3. 二级索引(手动添加的索引)访问需要两次索引查找,第一次找到主键值,第二次根据主键值找到行数据。

非聚簇索引

  1. 在聚簇索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找
  2. 辅助索引叶子节点存储的不再是行的物理位置,而是主键值。
  3. 通过辅助索引首先找到的是主键值,再通过主键值找到数据行的数据页,再通过数据页中的Page Directory找到数据行。
  4. innodb采用聚簇索引,mysima采用非聚簇索引


索引功能类型


而从功能上划分为主键索引、唯一索引、普通索引、全文索引

主键索引

  1. 主键索引是一种特殊的唯一索引,不允许值重复或者值为空。

唯一索引

  1. 唯一索引与普通索引类似,不同的是创建唯一性索引的目的不是为了提高访问速度,而是为了避免数据出现重复。

普通索引

  1. MySQL 中最基本的索引类型,它没有任何限制,唯一任务就是加快系统对数据的访问速度。

全文索引

  1. 用来查找文本中的关键字



索引下推

  1. 本质上为了减少回表次数从而减少io操作
  2. 根据条件在普通索引树搜索时,先在普通索引树结果执行where过滤条件再回表执行查询

覆盖索引

  1. 普通的索引查询步骤为,先根据索引树定位到主键,再根据主键去聚簇索引树回表查询数据行信息
  2. 本质上是索引中包含了要查询的字段信息,所以不用额外的进行回表查询

索引选错

  1. 优化器会根据扫描行数、是否使用临时表、是否排序、是否需要回表等因素进行综合判断。
  2. mysql执行语句时并不能准确知道满足条件的条数,只能统计估算
  3. InnoDB默认会选择N个数据页,统计这些页面上的不同值,得到一个平均值,然后乘以这个索引的页面数,就得到了这个索引的基数
  4. 数据会持续更新的,索引统计信息也会变。当变更的数据行数超过1/M的时候,会自动触发重新做一次索引统计。
  5. MySQL 会在选择索引的时候进行优化,如果 MySQL 认为全表扫描比走索引+回表效率高, 那么他会选择全表扫描,如果认为走索引的效率高,那么肯定也是会走索引的
  6. 如何解决?
  1. foces index强制按照指定索引查询
  2. 修改语句




相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
缓存 关系型数据库 MySQL
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
211 66
|
23天前
|
SQL 关系型数据库 MySQL
深入解析MySQL的EXPLAIN:指标详解与索引优化
MySQL 中的 `EXPLAIN` 语句用于分析和优化 SQL 查询,帮助你了解查询优化器的执行计划。本文详细介绍了 `EXPLAIN` 输出的各项指标,如 `id`、`select_type`、`table`、`type`、`key` 等,并提供了如何利用这些指标优化索引结构和 SQL 语句的具体方法。通过实战案例,展示了如何通过创建合适索引和调整查询语句来提升查询性能。
121 9
|
3月前
|
存储 关系型数据库 MySQL
阿里面试:为什么要索引?什么是MySQL索引?底层结构是什么?
尼恩是一位资深架构师,他在自己的读者交流群中分享了关于MySQL索引的重要知识点。索引是帮助MySQL高效获取数据的数据结构,主要作用包括显著提升查询速度、降低磁盘I/O次数、优化排序与分组操作以及提升复杂查询的性能。MySQL支持多种索引类型,如主键索引、唯一索引、普通索引、全文索引和空间数据索引。索引的底层数据结构主要是B+树,它能够有效支持范围查询和顺序遍历,同时保持高效的插入、删除和查找性能。尼恩还强调了索引的优缺点,并提供了多个面试题及其解答,帮助读者在面试中脱颖而出。相关资料可在公众号【技术自由圈】获取。
|
6天前
|
SQL 存储 关系型数据库
MySQL秘籍之索引与查询优化实战指南
最左前缀原则。不冗余原则。最大选择性原则。所谓前缀索引,说白了就是对文本的前几个字符建立索引(具体是几个字符在建立索引时去指定),比如以产品名称的前 10 位来建索引,这样建立起来的索引更小,查询效率更快!
54 22
 MySQL秘籍之索引与查询优化实战指南
|
7天前
|
存储 关系型数据库 MySQL
MySQL中为什么要使用索引合并(Index Merge)?
通过这些内容的详细介绍和实际案例分析,希望能帮助您深入理解索引合并及其在MySQL中的
35 10
|
27天前
|
缓存 关系型数据库 MySQL
MySQL 索引优化以及慢查询优化
通过本文的介绍,希望您能够深入理解MySQL索引优化和慢查询优化的方法,并在实际应用中灵活运用这些技术,提升数据库的整体性能。
69 18
|
20天前
|
存储 Oracle 关系型数据库
索引在手,查询无忧:MySQL索引简介
MySQL 是一款广泛使用的关系型数据库管理系统,在2024年5月的DB-Engines排名中得分1084,仅次于Oracle。本文介绍MySQL索引的工作原理和类型,包括B+Tree、Hash、Full-text索引,以及主键、唯一、普通索引等,帮助开发者优化查询性能。索引类似于图书馆的分类系统,能快速定位数据行,极大提高检索效率。
50 8
|
26天前
|
缓存 关系型数据库 MySQL
MySQL 索引优化以及慢查询优化
通过本文的介绍,希望您能够深入理解MySQL索引优化和慢查询优化的方法,并在实际应用中灵活运用这些技术,提升数据库的整体性能。
38 7
|
25天前
|
缓存 关系型数据库 MySQL
MySQL 索引优化与慢查询优化:原理与实践
通过本文的介绍,希望您能够深入理解MySQL索引优化与慢查询优化的原理和实践方法,并在实际项目中灵活运用这些技术,提升数据库的整体性能。
70 5
|
29天前
|
存储 关系型数据库 MySQL
Mysql索引:深入理解InnoDb聚集索引与MyisAm非聚集索引
通过本文的介绍,希望您能深入理解InnoDB聚集索引与MyISAM非聚集索引的概念、结构和应用场景,从而在实际工作中灵活运用这些知识,优化数据库性能。
129 7
下一篇
开通oss服务