我有下表:
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
仍然需要一段时间,即使表现在是空的。这是怎么回事?
答案 0 :(得分:5)
DELETE FROM Sdata
尝试使用OPTIMIZE TABLE Sdata
真正丢弃未使用的行后,或者将来使用TRUNCATE Sdata
会自动为您执行此操作。
引自here:
在MyISAM表中,已删除的行在链表中维护,后续INSERT操作重用旧行位置。要回收未使用的空间并减小文件大小,请使用OPTIMIZE TABLE语句或myisamchk实用程序重新组织表。