删除所有行后,COUNT(*)需要很长时间

时间:2013-06-13 08:14:29

标签: mysql count delete-row sql-delete

我有下表:

CREATE TABLE Sdata(uid INTEGER, timestamp DATETIME, value REAL, FOREIGN KEY (uid) REFERENCES Series_uid(uid));

有一次,这个表有~90M行。 我查询SELECT COUNT(*) FROM Sdata;大约需要7分钟。

然后我继续DELETE FROM Sdata;。这个查询花了一个多小时,考虑到大尺寸,这是可以理解的。 删除Sdata中的所有行后,我再次运行COUNT。这次还需要大约7分钟。

我很困惑为什么COUNT仍然需要一段时间,即使表现在是空的。这是怎么回事?

1 个答案:

答案 0 :(得分:5)

DELETE FROM Sdata尝试使用OPTIMIZE TABLE Sdata真正丢弃未使用的行后,或者将来使用TRUNCATE Sdata会自动为您执行此操作。

引自here

  

在MyISAM表中,已删除的行在链表中维护,后续INSERT操作重用旧行位置。要回收未使用的空间并减小文件大小,请使用OPTIMIZE TABLE语句或myisamchk实用程序重新组织表。