3

我有下表:

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即使桌子现在是空的,为什么仍然需要一段时间。这里发生了什么?

4

1 回答 1

5

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

从这里引用:

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

于 2013-06-13T08:17:44.683 回答