我刚刚发现"truncate {table}"
大多数数据库触发器都没有捕获语句。通过将此类陈述替换为 ,我是否会在性能方面承担任何风险"delete from {table}"
?
我对 MSSQL 和 Sybase 特别感兴趣。
我刚刚发现"truncate {table}"
大多数数据库触发器都没有捕获语句。通过将此类陈述替换为 ,我是否会在性能方面承担任何风险"delete from {table}"
?
我对 MSSQL 和 Sybase 特别感兴趣。
由于创建了正确的事务日志, DELETE 会更慢且占用资源更多。但是你可以让它成为更大交易的一部分,正如你所说,触发器和约束也将被激活。
TRUNCATE 被视为 DDL 操作,就像 DROP TABLE 一样。它非常快,但不能作为事务的一部分来完成(即不能回滚)。
您需要哪一种取决于您的要求。你有需要运行的触发器吗?如果是这样,您是否可以在 TRUNCATE 之后或之前做一些事情来补偿它们没有运行?
截断可以在 SQL Server 中回滚,但不能在 Sybase 中回滚。如果您有其他表对该表的 FK 引用,则不能使用 truncate 表。
如果您在触发器中有逻辑,例如审核数据或根据此删除从其他表中删除数据。您应该坚持删除,但如果您没有任何类型的触发器,那么最好的方法是截断表。