我刚刚在表单中运行了一个简单的删除查询:
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'查询起作用?我需要做一些刷新吗?感谢
答案 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