代码之家  ›  专栏  ›  技术社区  ›  EKS

删除表中的所有行

  •  57
  • EKS  · 技术社区  · 16 年前

    通常我会做一个 delete * from XXX 但是在这个非常慢的表上,它通常有大约500k到1m行(其中一行是varbinary(MAX),如果它是mathers的话)。

    基本上,我想知道是否有一种快速的方法来创建包含所有内容的表,实际上删除并重新创建它会更快,然后通过delete sql语句删除内容

    我也希望有一种方法可以做到这一点,因为有一种“聪明”的方法可以通过sys.sysindex获得行数,所以我希望有一种同样聪明的方法可以删除内容

    5 回复  |  直到 16 年前
        1
  •  80
  •   Scott Vander Molen    16 年前

    Truncate table 快于 delete * from XXX . Delete 速度很慢,因为它一次只能工作一行。有一些情况下truncate不起作用,您可以在上阅读 MSDN .

        2
  •  25
  •   adrianbanks    16 年前

    TRUNCATE TABLE 要快得多,但它确实有一些限制(取自 here ):

    不能对以下表使用TRUNCATE TABLE:


    -参与索引视图。


    对于具有一个或多个这些特征的表,请改用DELETE语句。

    最大的缺点是,如果您试图清空的表有外键指向它,那么truncate调用将失败。

        3
  •  12
  •   Duncan Beevers    16 年前

    有关详细信息,请参阅MySQL 5.1参考手册[ RENAME TABLE ][1] 及[ CREATE TABLE ][2] 命令。

    RENAME TABLE tbl TO tbl_old;
    
    CREATE TABLE tbl LIKE tbl_old;
    
    DROP TABLE tbl_old; -- at your leisure
    

    这种方法可以帮助最小化应用程序停机时间。

        4
  •  11
  •   Steve Temple    16 年前

    我建议使用TRUNCATE TABLE,它比从xxx删除更快,占用的资源更少

    MSDN article