【发布时间】:2013-06-09 13:22:18
【问题描述】:
我有下表:
CREATE TABLE Sdata(uid INTEGER, timestamp DATETIME, value REAL, FOREIGN KEY (uid) REFERENCES Series_uid(uid));
在某一时刻,该表有大约 9000 万行。
我查询了SELECT COUNT(*) FROM Sdata;,花了大约 7 分钟。
然后我转到DELETE FROM Sdata;。这个查询花了一个多小时,考虑到大尺寸,这是可以理解的。
从Sdata 删除所有行后,我再次运行COUNT。这次还是花了大约 7 分钟。
我很困惑为什么COUNT 仍然需要一段时间,即使表格现在是空的。这是怎么回事?
【问题讨论】:
-
哪个存储引擎?
-
所有表都在使用 InnoDB。
-
我不是 100% 使用 MySQL,因此为什么这是评论而不是答案:尝试使用
TRUNCATE SData而不是DELETE FROM SData-DELETE FROM将清空表格,但可能不完全清理它。TRUNCATE实际上在内部删除并重建表(如果您有一个自动增量标识字段,它也会重置为 1)。也可以试试OPTIMIZE TABLE SData
标签: mysql count delete-row sql-delete