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

leo*_*sas 3 mysql count delete-row sql-delete

我有下表:

CREATE TABLE Sdata(uid INTEGER, timestamp DATETIME, value REAL, FOREIGN KEY (uid) REFERENCES Series_uid(uid));
Run Code Online (Sandbox Code Playgroud)

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

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

我很困惑,为什么COUNT仍然需要一段时间,即使表现在是空的.这里发生了什么?

Mla*_* B. 5

DELETE FROM Sdata尝试使用OPTIMIZE TABLE Sdata以真正丢弃未使用的行之后,或将来使用TRUNCATE Sdata哪个将自动为您执行此操作.

这里引用:

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