mysql - MySQL 索引如何工作?

标签 mysql indexing

我对 MySQL 索引的工作原理非常感兴趣,更具体地说,它们如何在不扫描整个表的情况下返回所请求的数据?

我知道这有点题外话,但如果有人可以向我详细解释这一点,我将非常非常感激。

最佳答案

基本上,表上的索引就像书中的索引一样(这就是名称的由来):

假设您有一本有关数据库的书,并且想要查找一些有关存储等方面的信息。如果没有索引(假设没有其他帮助,例如目录),您必须一页一页地浏览页面,直到找到主题(即全表扫描)。 另一方面,索引有一个关键字列表,因此您可以查阅索引并看到第 113-120,231 和 354 页上提到了存储。然后您可以直接翻到这些页面,无需搜索(这是使用索引的搜索,速度稍快一些)。

当然,索引的有用程度取决于很多因素 - 使用上面的比喻举几个例子:

  • 如果您有一本关于数据库的书并为“数据库”一词建立了索引,您会发现第 1-59,61-290 页以及第 292 到 400 页中提到了它。在这种情况下,索引没有太大帮助并且一页一页地浏览页面可能会更快(在数据库中,这是“选择性差”)。
  • 对于一本 10 页的书,创建索引是没有意义的,因为您最终可能会得到一本 10 页的书,前面加上 5 页的索引,这很愚蠢 - 只需扫描 10 页即可完成了。
  • 索引还需要有用 - 通常没有必要建立索引,例如每页字母“L”的出现频率。

关于mysql - MySQL 索引如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51104878/

相关文章:

SQL 语句(连接)

mysql - 我如何限制每组的行数?

python - 在 NumPy 数组中概括切片操作

javascript - 在存在多个 div 的特定 div 中查找项目的索引

php - PHP 中有没有办法将数据库从本地主机上传到云端? MySQL

MySQL SELECT 记录从特定日期开始不存在

c - 在C中将已排序数组的索引获取到另一个数组中

c - 索引二维矩阵(指针样式)- 错误 : cant index

php - MYSQL - 更新但保留旧信息

Javascript 将数组对生成键索引列表