MySQL索引如何工作?我对MySQL索引的工作方式非常感兴趣,更具体地说,他们如何在不扫描整个表的情况下返回所请求的数据?我知道,这是偏离主题的,但如果有人可以向我详细解释这一点,我会非常,非常感谢。
3 回答
潇潇雨雨
TA贡献1833条经验 获得超4个赞
基本上,表上的索引就像书中的索引(名称来自的位置):
假设你有一本关于数据库的书,你想找一些关于存储的信息。没有索引(假设没有其他帮助,例如目录),您必须逐个浏览页面,直到找到主题(即a full table scan
)。另一方面,索引有一个关键字列表,所以你可以参考索引,看看storage
第113-120,231和354页上提到的那个。然后你可以直接翻到这些页面,而无需搜索(这是一个搜索索引,有点快)。
当然,索引的有用性取决于很多东西 - 一些例子,使用上面的明喻:
如果您有一本关于数据库的书并将“数据库”这个词编入索引,您会看到它在1-59,61-290和292到400页中提到过。在这种情况下,索引没有多大帮助,它可能会更快地逐页浏览(在数据库中,这是“差的选择性”)。
对于一本10页的书,制作一个索引是没有意义的,因为你可能最终得到一个10页的书,前面有一个5页的索引,这只是愚蠢的 - 只需扫描10页并完成它。
索引也需要有用 - 通常没有必要索引例如每页字母“L”的频率。
不负相思意
TA贡献1777条经验 获得超10个赞
基本上,索引是按顺序排序的所有键的映射。按顺序列表,然后它可以执行以下操作,而不是检查每个键:
1:进入列表中间 - 是高还是低于我正在寻找的?
2:如果更高,则进入中间和底部之间的中间位置,如果是低位,中位和顶部
3:更高还是更低?再次跳到中间点等
使用该逻辑,您可以在大约7个步骤中找到排序列表中的元素,而不是检查每个项目。
显然有复杂性,但这给了你基本的想法。
添加回答
举报
0/150
提交
取消