mysql - 索引如何让速度快?

标签 mysql sql performance indexing

我的问题都在标题中。为什么索引确实使查询如此快?!我读过一些关于索引以及如何使用它们的文章。但我仍然不知道当我在列上创建索引时后台会发生什么?

它会对行进行排序吗?好吧?您知道,当我在两列上创建复合索引时,我的一个查询的速度从 4 秒 降低到 0.04 秒

无论如何,我很想了解创建索引时会发生什么?它们对性能有何帮助?

最佳答案

让我们看一个有 50 条记录的表,它没有索引。

您可能想查询第49条记录,当您输入

select * from <myTable> where Id='49'

后台发生的事情是,迭代每个页面或每一行,并检查 id 该行是否为第 49 行,一旦到达第 49 行,就会将该行推送到屏幕上。但这里需要注意的是,每个迭代的行都会先被拉入内存,然后将最终结果推送到屏幕上

如果您在 ID 列上添加了索引怎么办?所发生的情况是创建一个单独的表,用于存储 ID 值及其各自的行地址。因此,现在当您根据 ID 进行查询时,它会快速找到该特定 ID 的行地址并将其拉入内存,并且根据您想要的内容(“*”或某些列),它会在内存中进行过滤并推送到屏幕上。

这可能对你有帮助

https://www.youtube.com/watch?v=rtmeNwn4mEg&t=601s

关于mysql - 索引如何让速度快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45390259/

相关文章:

java - Hibernate 5 忽略@Table 模式参数

mysql用一列值替换另一列值

mysql - 右连接等于左连接?

java - 如何将 MySQL 查询结果放入 ArrayList<object>

java - 使用 java 检查 ibatis 中的 isNotEqual 属性

powershell - 从 | 中删除 3,7 和 9 列的速度很慢使用 PowerShell 分离 txt 文件

MySQL日期格式转换 "Fri, 06 Nov 2015 04:06:05 -0500"

mysql基于列从两行连接列

分层 Canvas 与手动drawImage()的性能

c++ - 现代处理器(如i7)会在遍历指针列表时跟随指针并预取其数据吗?