【问题标题】:I have a question about how the clustered-index works in Innodb我对聚集索引在 Innodb 中的工作方式有疑问
【发布时间】:2020-07-27 22:54:58
【问题描述】:

当我们构造索引时,索引信息存储在磁盘中。但是如果我们执行像select这样的查询,索引将如何被使用。索引文件会被加载到 RAM 还是会使用任何缓存?非常感谢。

【问题讨论】:

    标签: mysql innodb clustered-index


    【解决方案1】:

    您的问题似乎在“集群”与否之间摇摆不定。我将尝试解释它们的区别和用法。

    InnoDB 的 PRIMARY KEY 与数据“聚集在一起”。有一个 BTree(实际上是 B+Tree)保存所有数据,按 PK 排序。

    二级索引是独立的 BTree。它们按为索引指定的列排序。这种 BTree 的叶子包含 PK,因此它可以通过第二次查找获得整个记录。

    BTree 由 16KB 块组成。每个块包含几行(经验法则:100 行。实际上,在 1 到 ~1000 之间。)

    块被加载到“缓冲池”中根据需要。没有预加载整个 BTree。 SELECTs从 buffer_pool 访问数据和索引信息,从磁盘访问。写操作可以从索引中读取以定位插入/修改/删除行所在或需要去的块。然后它请求从磁盘中获取块(除非已经缓存在 buffer_pool 中)。后台任务将负责刷新到磁盘。

    作为“缓存”,整个数据或索引可能也可能不完全在buffer_pool中。

    有关 BTree 和 B+Tree 的讨论,请参见 Wikipedia。

    【讨论】:

      【解决方案2】:

      Innodb 索引与 innodb 的所有其他数据页一起存储在 innodb_buffer_pool 中。

      要检查查询的索引使用情况,请查看EXPLAIN {query} 输出。

      【讨论】:

        猜你喜欢
        • 2019-06-24
        • 2016-11-23
        • 2012-10-14
        • 2020-11-28
        • 1970-01-01
        • 1970-01-01
        • 2022-11-25
        • 2013-04-30
        • 1970-01-01
        相关资源
        最近更新 更多