Mysql 即使删除所有行,计数(*)也需要很长时间

Mysql 即使删除所有行,计数(*)也需要很长时间,mysql,count,delete-row,sql-delete,Mysql,Count,Delete Row,Sql Delete,我有下表: CREATE TABLE Sdata(uid INTEGER, timestamp DATETIME, value REAL, FOREIGN KEY (uid) REFERENCES Series_uid(uid)); 在某一点上,该表有约90M行。 我从Sdata查询选择计数(*)大约花了7分钟 然后我继续从Sdata中删除。这个查询花了一个多小时,考虑到规模很大,这是可以理解的。 从Sdata中删除所有行后,我再次运行计数。这一次仍然花了大约7分钟 我不明白为什么即使现在表是

我有下表:

CREATE TABLE Sdata(uid INTEGER, timestamp DATETIME, value REAL, FOREIGN KEY (uid) REFERENCES Series_uid(uid));
在某一点上,该表有约90M行。 我从Sdata查询
选择计数(*)大约花了7分钟

然后我继续从Sdata中删除
。这个查询花了一个多小时,考虑到规模很大,这是可以理解的。
从
Sdata
中删除所有行后,我再次运行
计数。这一次仍然花了大约7分钟


我不明白为什么即使现在表是空的,
计数仍然需要一段时间。这里发生了什么?

从Sdata中删除之后
尝试使用
优化表Sdata
以真正丢弃未使用的行,或者在将来,使用
截断Sdata
自动执行此操作

引自:

在MyISAM表中,删除的行保存在链表中,后续的插入操作重用旧的行位置。要回收未使用的空间并减少文件大小,请使用OPTIMIZETABLE语句或myisamchk实用程序重新组织表


哪个存储引擎?所有的表都使用InnoDB。我不是100%使用MySQL,因此这是一个注释而不是答案,但是:尝试使用
TRUNCATE SData
而不是
DELETE FROM SData
-
DELETE FROM
将清空表,但可能不会完全清理它
TRUNCATE
实际上在内部删除并重建表(如果表上有自动递增标识字段,它也将重置为1)。还可以尝试优化表SData