赞
踩
什么是索引?索引是提升查询速度的一种数据结构
索引的优缺点
优点:使用索引可以加快数据的检索速度,这是创建索引的本质原因,通过创建唯一性索引,可以保证数据库中每一行数据的唯一性
缺点:
索引底层数据结构有很多种类型,主要的有:B+树、B-树、Hash。在 MySQL 中,无论是 Innodb 还是 MyIsam,都是用了 B+树作为索引结构
B+树是一种多叉树,一个 m 阶的 B+树定义如下
两个重要特征:
用于数据库索引的三大优势:
哈希索引能以 O(1)的时间复杂度去查找,但是失去了有序性,它具有如下限制:
InnoDB 存储引擎有一个特殊的功能叫“自适应哈希索引”,当某个索引值被使用的非常频繁时,会在 B+Tree 索引之上再创建一个哈希索引,这样就让 B+Tree 索引具有哈希索引的一些优点,比如快速的哈希查找。
MyISAM 存储引擎支持空间数据索引,可以用于地理数据存储。空间数据索引会从所有维度来索引数据,可以有效地使用任意维度来进行组合查询
MyISAM 存储引擎支持全文索引,用于查找文本中的关键词,而不是直接比较是否相等。查找条件使用 MATCH AGAINST,而不是普通的 WHERE。
全文索引一般使用倒排索引实现,它记录着关键词到其所在文档的映射
优缺点对比
优点:
缺点:
非聚簇索引优缺点相反
如果一个索引覆盖了所有需要查询的字段的值,我们称它为覆盖索引
为什么要用联合索引?
当使用 EXPLAIN 分析 MySQL 查询时,可以通过以下方式来确定是否使用了覆盖索引(Covering Index):
索引下推(Index Condition Pushdown) 是 MySQL 5.6 版本中提供的一项索引优化功能,可以在非聚簇索引遍历过程中,对索引中包含的字段先做判断,过滤掉不符合条件的记录,减少回表次数
考虑一个简单的例子,假设我们有一个表 students,其中有一个索引 (age, name)。现在,我们要查询所有年龄为 20 岁且名为 "John" 的学生。
传统的查询过程是这样的:
如果没有索引下推,即使在第一步中已经排除了大部分学生,仍然需要检查第二步和第三步中的所有学生名字。
但是,有了索引下推,当检查到某个学生的年龄不满足条件时,就可以直接跳过后续的检查,因为该学生肯定不是我们要找的。这样,可以减少需要访问的数据量,从而提高查询效率。
“模型数空运最快”
模糊查询、数据类型不匹配、函数、空值、运算、最左前缀匹配、全表更快
2023 年 12 月 字节后端实习面试 如果查询的字段即在联合索引又在单列索引,先走哪个?为什么?
2024 年 1 月 字节后端实习面试 以 a、b、c 三列建立联合索引,查询 select * from table where a = x , c = y;这个时候会动索引吗?为什么?
参考博客 MYSQL | 最左匹配原则的原理-腾讯云开发者社区-腾讯云
联合索引的最左匹配原则,在遇到范围查询(如 >、<)的时候,就会停止匹配,也就是范围查询的字段可以用到联合索引,但是在范围查询字段后面的字段无法用到联合索引。但是,对于 >=、<=、BETWEEN、like 前缀匹配这四种范围查询,并不会停止匹配
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。