我对 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/