gpt4 book ai didi

mysql - 大量写入/插入会影响数据库索引吗?

转载 作者:行者123 更新时间:2023-11-29 06:01:08 28 4
gpt4 key购买 nike

数据库是否必须在每次插入新行时重建其索引?

因此,这是否意味着如果我插入很多,索引将不断重建,因此查询效率降低/无用?

我正在尝试了解一些数据库理论以更好地设计数据库。

最佳答案

更新绝对不需要在每次更新时都重建整个索引(同样插入和删除)。

更新索引中的条目会产生一些开销,但成本相当低。大多数索引在内部存储为 B+Tree data structure .选择此数据结构是因为它易于修改。

MySQL 还有一个进一步的优化称为 Change Buffer .此缓冲区有助于通过缓存更改来降低更新索引的性能成本。也就是说,您执行影响索引的 INSERT/UPDATE/DELETE,并且更改的类型记录在 Change Buffer 中。下次您使用查询读取该索引时,MySQL 将读取 Change Buffer 作为对完整索引的一种补充。

一个很好的类比可能是定期发布“勘误表”的已发布文档,因此您需要同时阅读文档和勘误表以了解文档的当前状态。

最终,Change Buffer 中的条目逐渐合并到索引中。这类似于在下次重印文档时将勘误表编辑到文档中。

Change Buffer 仅用于二级索引。它对主键或唯一键索引没有任何作用。唯一索引的更新不能延迟,但它们仍然使用 B+Tree,因此成本不高。

如果你这样做 OPTIMIZE TABLE或某些类型的 ALTER TABLE无法就地完成的更改,MySQL 会从头开始重建索引。例如,这对于在删除大量表后对索引进行碎片整理很有用。

关于mysql - 大量写入/插入会影响数据库索引吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44789043/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com