从表中删除所有

l--*_*''' 60 mysql sql optimization performance ms-access

什么更快?

DELETE * FROM table_name;
Run Code Online (Sandbox Code Playgroud)

要么

DELETE * FROM table_name where 1=1;
Run Code Online (Sandbox Code Playgroud)

为什么?

truncate table在获得工作?

Jay*_*ymz 136

TRUNCATE TABLE table_name

  • 不,如果您在原始问题中提到Access,会有所帮助.在这种情况下,DELETE FROM table_name将最快地完成工作,如下所述. (3认同)
  • Access不维护事务日志,这就是为什么不需要TRUNCATE语句,以及为什么DELETE FROM table_name可以很好地完成这项工作. (3认同)
  • 请记住,`TRUNCATE`将重置MySQL表上的所有`AUTO_INCREMENT`计数(不确定MS Access是否具有这种功能)。 (2认同)
  • 应当注意,DELETE和TRUNCATE不是同一件事。TRUNCATE具有副作用,通常需要更多权限才能执行。 (2认同)

Sar*_*raz 28

这应该更快:

DELETE * FROM table_name;
Run Code Online (Sandbox Code Playgroud)

因为RDBMS不必看where是什么.

你应该没问题truncate:

truncate table table_name
Run Code Online (Sandbox Code Playgroud)


Pek*_*ica 10

2004年有一个 mySQL错误报告似乎仍然有一定的效力.似乎在4.x中,这是最快的:

DROP table_name
CREATE TABLE table_name
Run Code Online (Sandbox Code Playgroud)

TRUNCATE table_name当时在DELETE FROM内部,没有任何性能提升.

这似乎已经改变了,但仅限于5.0.3及更年轻.从错误报告:

[2005年1月11日16:10]MarkoMäkelä

我现在已经实现了快速TRUNCATE TABLE,它有望包含在MySQL 5.0.3中.


Ola*_*iya 9

这会删除表格table_name.

将其替换为表的名称,该表将被删除.

DELETE FROM table_name;
Run Code Online (Sandbox Code Playgroud)

  • 这不会删除表,而是删除表中的所有行,并允许您继续使用不受影响的表。这对我来说非常完美,谢谢。 (2认同)