MYSQL索引也是要考察的哈

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: 《基础》系列

3、MySQL 使用索引的原因?

根本原因

  • 索引的出现,就是为了提高数据查询的效率,就像书的目录一样。
  • 对于数据库的表而言,索引其实就是它的“目录”。

扩展

  • 创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
  • 帮助引擎层避免排序和临时表
  • 将随机 IO 变为顺序 IO,加速表和表之间的连接。

4、索引的三种常见底层数据结构以及优缺点

三种常见的索引底层数据结构:分别是哈希表、有序数组和搜索树。

  • 哈希表这种适用于等值查询的场景,比如 memcached 以及其它一些 NoSQL 引擎,不适合范围查询。
  • 有序数组索引只适用于静态存储引擎,等值和范围查询性能好,但更新数据成本高。
  • N 叉树由于读写上的性能优点以及适配磁盘访问模式以及广泛应用在数据库引擎中。
  • 扩展(以 InnoDB 的一个整数字段索引为例,这个 N 差不多是 1200。棵树高是 4 的时候,就可以存 1200 的 3 次方个值,这已经 17 亿了。考虑到树根的数据块总是在内存中的,一个 10 亿行的表上一个整数字段的索引,查找一个值最多只需要访问 3 次磁盘。其实,树的第二层也有很大概率在内存中,那么访问磁盘的平均次数就更少了。)

5、索引的常见类型以及它是如何发挥作用的?

根据叶子节点的内容,索引类型分为主键索引和非主键索引。

  • 主键索引的叶子节点存的整行数据,在InnoDB里也被称为聚簇索引。
  • 非主键索引叶子节点存的主键的值,在InnoDB里也被称为二级索引。

6、MyISAM 和 InnoDB 实现 B 树索引方式的区别是什么?

  • InnoDB 存储引擎:B+ 树索引的叶子节点保存数据本身,其数据文件本身就是索引文件。
  • MyISAM 存储引擎:B+ 树索引的叶子节点保存数据的物理地址,叶节点的 data 域存放的是数据记录的地址,索引文件和数据文件是分离的。

7、InnoDB 为什么设计 B+ 树索引?

两个考虑因素:

  • InnoDB 需要执行的场景和功能需要在特定查询上拥有较强的性能。
  • CPU 将磁盘上的数据加载到内存中需要花费大量时间。

为什么选择 B+ 树:

  • 哈希索引虽然能提供O(1)复杂度查询,但对范围查询和排序却无法很好的支持,最终会导致全表扫描。
  • B 树能够在非叶子节点存储数据,但会导致在查询连续数据可能带来更多的随机 IO。
  • 而 B+ 树的所有叶节点可以通过指针来相互连接,减少顺序遍历带来的随机 IO。
  • 普通索引还是唯一索引?
    由于唯一索引用不上 change buffer 的优化机制,因此如果业务可以接受,从性能角度出发建议你优先考虑非唯一索引。

8、什么是覆盖索引和索引下推?

覆盖索引:

  • 在某个查询里面,索引 k 已经“覆盖了”我们的查询需求,称为覆盖索引。
  • 覆盖索引可以减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段。

索引下推:

  • MySQL 5.6 引入的索引下推优化(index condition pushdown), 可以在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。

9、哪些操作会导致索引失效?

  • 对索引使用左或者左右模糊匹配,也就是 like %xx 或者 like %xx% 这两种方式都会造成索引失效。原因在于查询的结果可能是多个,不知道从哪个索引值开始比较,于是就只能通过全表扫描的方式来查询。
  • 对索引进行函数/对索引进行表达式计算,因为索引保持的是索引字段的原始值,而不是经过函数计算的值,自然就没办法走索引。
  • 对索引进行隐式转换相当于使用了新函数。
  • WHERE 子句中的 OR语句,只要有条件列不是索引列,就会进行全表扫描。

10、字符串加索引

  • 直接创建完整索引,这样可能会比较占用空间。
  • 创建前缀索引,节省空间,但会增加查询扫描次数,并且不能使用覆盖索引。
  • 倒序存储,再创建前缀索引,用于绕过字符串本身前缀的区分度不够的问题。
  • 创建 hash 字段索引,查询性能稳定,有额外的存储和计算消耗,跟第三种方式一样,都不支持范围扫描。
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
存储 关系型数据库 MySQL
MySQL索引详解
MySQL索引详解
|
2天前
|
关系型数据库 MySQL 测试技术
深入探索MySQL 8:隐藏索引与降序索引的新特性
深入探索MySQL 8:隐藏索引与降序索引的新特性
|
2天前
|
存储 关系型数据库 MySQL
架构面试题汇总:mysql索引汇总(2024版)
架构面试题汇总:mysql索引汇总(2024版)
|
2天前
|
关系型数据库 MySQL 分布式数据库
PolarDB产品使用问题之mysql迁移后查询不走索引了,该如何解决
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
2天前
|
存储 SQL 关系型数据库
|
4天前
|
SQL 关系型数据库 MySQL
MySQL性能优化实战:从索引策略到查询优化
MySQL性能优化聚焦索引策略和查询优化。创建索引如`CREATE INDEX idx_user_id ON users(user_id)`可加速检索;复合索引考虑字段顺序,如`idx_name ON users(last_name, first_name)`。使用`EXPLAIN`分析查询效率,避免全表扫描和大量`OFFSET`。通过子查询优化分页,如LIMIT配合内部排序。定期审查和调整策略以提升响应速度和降低资源消耗。【6月更文挑战第22天】
94 2
|
4天前
|
关系型数据库 MySQL 数据库
MySQL企业级开发重点之事物和索引
MySQL企业级开发重点之事物和索引
11 2
|
3天前
|
存储 关系型数据库 MySQL
Mysql优化之索引相关介绍(笔记)
索引查找从顶层节点开始查找,通过key值,也就是主键的值进行比较,最终定位到存储数据的叶子节点上面,从叶子节点取出响应的数据。
28 0
Mysql优化之索引相关介绍(笔记)
|
7天前
|
存储 SQL 关系型数据库
初识mysql索引 - 小白篇
初识mysql索引 - 小白篇
|
10天前
|
SQL 存储 关系型数据库
MySQL数据库进阶第二篇(索引,SQL性能分析,使用规则)
MySQL数据库进阶第二篇(索引,SQL性能分析,使用规则)