MySQL索引是如何工作的?

我真正感兴趣的是MySQL索引是如何工作的,更具体地说,它们如何在不扫描整个表的情况下返回请求的数据

我知道这是离题的,但如果有人能向我详细解释这一点,我将非常非常感谢

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

假设你有一本关于数据库的书,你想找到一些关于存储的信息。如果没有索引(假设没有其他帮助,例如目录),您必须逐个浏览页面,直到找到主题(这是全表扫描)。
另一方面,索引有一个关键字列表,因此您可以查阅索引,并在第113-120231页和第354页中提到存储。然后,您可以直接翻到这些页面,而无需搜索(这是一个带有索引的搜索,速度更快)

当然,索引的有用程度取决于许多事情——使用上面的比喻,举几个例子:

  • 如果你有一本关于数据库的书,并为“数据库”这个词编制了索引,你会看到第1-59页、第61-290页和第292-400页都提到了它。在这种情况下,索引没有多大帮助,逐个浏览页面可能会更快(在数据库中,这是“选择性差”)
  • 对于一本10页的书来说,建立索引是没有意义的,因为你可能会得到一本10页的书,前面加了一个5页索引,这太傻了——只需扫描10页就可以了
  • 索引也需要有用-通常没有索引的意义,例如每页字母“L”的频率

发表评论