【问题标题】:Should I reset a table index / optimize after deletion of many rows?我应该在删除多行后重置表索引/优化吗?
【发布时间】:2011-06-21 10:00:20
【问题描述】:

我有一个包含 1,000,000 条记录的表,我正在运行一条删除约 700k 行的语句。自动增量索引当然仍然是 1,000,001。之后的最高主键,例如 40,000。

在删除如此大量的行之后,我应该手动将索引设置回 40,001 还是以任何方式优化表?或者 MySQL 在插入新行和之后在 select 语句中使用索引时不关心这个巨大的差距(就速度而言)?

【问题讨论】:

  • 重复使用 ID 号码绝不是一个好主意,除非您的可用 ID 真的非常非常少。
  • @Matti:即便如此,最好为 ID 列使用不同的数据类型,例如 bigint(当然是无符号的),以防止与之前删除的键发生冲突...
  • 嗯..我想你是对的,重复使用主键一般来说似乎是个坏主意。

标签: mysql optimization indexing sql-delete


【解决方案1】:

MySQL manual 说:

如果你应该使用 OPTIMIZE TABLE 已删除表的大部分 或者如果您对 具有可变长度行的表

但不要重置主键,它会搞砸。 INT 数据类型(大概)从 1M 有很大的增长空间。

就查询速度而言,索引值是在 1 000 000 还是在 1 000 000 000 都没有关系。

【讨论】:

    【解决方案2】:

    之后使用 OPTIMIZE TABLE 有助于 MySQL 确定执行查询的最佳/最快方式,例如使用索引还是表扫描?它使用所谓的统计信息来执行此操作,因此调用 OPTIMIZE TABLE 基本上是在暗示您已经进行了重大更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-10
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多