【问题标题】:How to disable index in innodb in mysql如何在mysql的innodb中禁用索引
【发布时间】:2021-06-10 04:33:45
【问题描述】:

我的mysql 版本是8.0。我有一个InnoDB table 的数据超过10 million rows,而数据file size2G

我每次都使用pd.to_sql 插入several thousand rows 的数据。启用index时,插入速度为very slow

如何temporarily disableindex?并且插入完成后enable the index?

我尝试了How to disable index in innodb中的操作:

SET autocommit=0;
SET unique_checks=0;
SET foreign_key_checks=0;

但索引是still 有效。

【问题讨论】:

  • 如何暂时禁用索引? 不行。您可以删除索引并在插入完成后重新创建它。 PS。无论如何都必须存储主键(集群) - 如果您将其与另一个索引一起删除,则在重新创建期间将发生完整的表重写。
  • 看来只有这个方法可行。

标签: python mysql pandas dataframe innodb


【解决方案1】:

不,还有其他问题。

请提供所涉及代码的更多详细信息。在 10M 行的表中插入几千行不会受益于重建索引的高成本。

请提供SHOW CREATE TABLE,以便我们查看索引。 UNIQUE 索引的处理方式不同。 FOREIGN KEYs 增加开销。批处理行有很大帮助,但是 10K 行是高效的高端。 PRIMARY KEY 是什么?是否以任何可预测的顺序插入行?

【讨论】:

  • 我做了一个对比,插入几千行不需要删除索引。
【解决方案2】:
  1. 删除索引
  2. 插入您的数据
  3. 创建索引

【讨论】:

  • 不适用于主键或被视为主的索引。
  • 我预测这比简单地插入行要慢——因为它只占总数的 0.1%。
猜你喜欢
  • 2012-03-20
  • 2012-09-23
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
相关资源
最近更新 更多