• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

你需要掌握的13个MySQL索引知识点

mysql 搞代码 4年前 (2022-01-09) 11次浏览 已收录 0个评论
文章目录[隐藏]

本篇文章介绍了MySQL索引的13个知识点,相信对各位面试非常有帮助,现在将它分享给各位。

数据库索引有关的知识,说实在的,真的是很复杂,本来想好好看看这方面的东西,然后写篇文章详细谈谈的,后来发现索引的知识太难太深,要谈得全面又详细真的很难,所以最后还是把自己学到的和想到的变成下面一个个的问题,希望能对大家帮助!

知识点

问题1:什么是数据库索引?

数据库索引是数据库系统中一个重要的概念,索引也叫做 key ,是一种用于提升数据库查询效率的数据结构,我们可以把索引理解成一本书的目录,通过目录我们可以快速找到对应章节的内容,同样的,通过数据库索引,我们可以快速找到数据表中对应的记录。

总而言之,索引就像给数据表建了一个目录一样。

问题2:为什么在使用索引?

1 . 使用索引大大减少了存储引擎需要扫描的数据量,如果没有使用索引的话,每查询一行数据都要对数据表进行扫描,这样的话会非常慢。

2 . 由于索引已经排好序的,所以对数据表进行 ORDER BYGROUP BY 等操作时,可以很快得到结果。

3 . 索引可以将随机的 I/O 转为顺序的 I/O ,避免高昂的磁盘 IO 成本,提升查询效率。

问题3:MySQL索引在哪个模块中实现的?

(免费学习视频教程推荐:mysql视频教程)

MySQL 的索引是在存储引擎这一层实现的,因此每一种存储引擎都有不同的实现方式,对同一种索引的处理方式也完成不同。

问题4:为什么设置了索引却不起作用?

如果使用以 % 开头的 LIKE 语句进行模糊匹配,则无法使用索引,如:

SELECT * FROM users WHERE name LIKE '%小张%';SELECT * FROM users WHERE name LIKE '%小张';

不过以 % 为结尾则可以使用索引,如:

SELECT * FROM users WHER<div>本文来源gaodai.ma#com搞#代!码网_</div>E name LIKE '张%';

OR 语句前后没有同时使用索引,比如下面的语句, 字段id 有索引,而 字段name 没有创建索引,那么下面的语句只能全表扫描,无法用到索引:

SELECT * FROM users id = 10 or name='test'复制代码

问题5:MySQL索引底层使用什么数据结构?

MySQL 中,大部分情况下,索引都是使用 B-Tree 作为底层数据结构, B-Tree 只是一种泛称,实际上不同的存储引擎使用 B-Tree 时,有不同的变种,比如 InnoDB 使用的是 B+Tree

另外也有一些特殊的索引结构,比如哈希索引,哈希索引底层则使用的是哈希表,在 MySQL中,只有 Memory 存储引擎支持哈希索引。

问题6:什么情况下数据表不适合创建索引?

1 . 对于用于存储归档历史数据的且很少用于查询的数据表,不建议创建索引。

2 . 数据量比较小的数据表,而且未来数据也不会有太大增长的数据,不应该建索引,比如用于保存配置的数据表。

3 . 修改频繁,且修改性能远大于查询性能时,不应该再创建索引。

问题7:什么是回表?

回表是对Innodb存储引擎而言的,在 InnoDB 存储引擎中,主键索引的叶子节点存储的记录的数据,而普通索引的叶子节点存储的主键索引的地点。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:你需要掌握的13个MySQL索引知识点

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址