gpt4 book ai didi

mysql - 为什么当有几个索引时,MySQL InnoDB 对大表的插入/更新会变得非常慢?

转载 作者:IT老高 更新时间:2023-10-28 23:53:00 26 4
gpt4 key购买 nike

我们有一系列已经有机地增长到数百万行的表,在生产中执行插入或更新可能需要两秒钟。但是,如果我转储该表并从转储中重新创建它,查询会快如闪电。

我们通过创建一个重建索引的副本重建了其中一个表,然后进行重命名切换并复制任何新行,这是有效的,因为该表只被附加到。这样做可以使插入和更新变得闪电般快速。

我的问题:

为什么插入会随着时间变慢?为什么重新创建表并进行导入可以解决这个问题?有什么方法可以在不锁定表进行更新的情况下重建索引?

最佳答案

好像是这样的

  • 随着时间的推移索引失衡
  • 磁盘碎片
  • 内部 innodb 数据文件碎片

您可以尝试analyze table foo,它不需要锁定,只需几次索引潜水并需要几秒钟。

如果这不能解决问题,您可以使用

mysql> SET PROFILING=1;
mysql> INSERT INTO foo ($testdata);
mysql> show profile for QUERY 1;

你应该看到大部分时间都花在了哪里。

显然,innodb 在以 PK 顺序进行插入时表现更好,这是你的情况吗?

关于mysql - 为什么当有几个索引时,MySQL InnoDB 对大表的插入/更新会变得非常慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2222861/

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