MySQL - 如何在大量删除后刷新表

时间:2014-01-09 22:20:26

标签: mysql

我刚刚在表单中运行了一个简单的删除查询:

DELETE*FROM [db.table] WHERE id < [value];

这从数据库中删除了大约8000万行(我已经归档了数据,不再需要它)。该系统不断以每秒约20次插入的速率传输数据,现在数据库中又有数千个条目。

如果我运行一个对降序进行排序的查询(限制为1000行),请执行以下操作:

SELECT*FROM [db.table] ORDER BY id DESC;

我立即得到了结果,但是如果我按升序排序,就像这样:

SELECT*FROM [db.table] ORDER BY id ASC;

查询将在10分钟后超时。在我看来(这只是一个猜测),查询将遍历我最近删除的行的所有ID,并且永远不会获取最新数据。这可能吗?

如何让'sort ASC'查询起作用?我需要做一些刷新吗?感谢

2 个答案:

答案 0 :(得分:1)

在进行大删除后,请考虑运行MYSQL的optimize table

  

重新组织表数据和关联索引数据的物理存储,以减少存储空间并提高访问表时的I / O效率。对每个表所做的确切更改取决于该表使用的存储引擎。

文档:http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html

答案 1 :(得分:0)

我更喜欢使用这种智能方式设置自动增量值:

DELETE * FROM [db.table] WHERE id < [value],
ALTER TABLE [db.table] AUTO_INCREMENT = [value];

顺便说一下,我总是设置一个无符号整数的主要ID:

ALTER TABLE [db.table] CHANGE `id` `id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT