【问题标题】:Advantages and disadvantages of using delete from vs. copying the data and using drop使用 delete from 与复制数据并使用 drop 的优缺点
【发布时间】:2013-03-06 17:49:15
【问题描述】:

MySQL 查询

 delete from t where not condition;

 create table s select * from t where condition;
 drop table t;

非常相似。 (这里,一个查询中的condition 与另一个查询中的condition 相同。)
第二种方法的一个优点是它允许您在删除t 之前检查s,以确保您的查询没有出错。这是一个非常重要的考虑因素,我不想将其最小化,但我想知道上述任何一个查询相对于另一个查询存在哪些其他优点和缺点。

【问题讨论】:

  • 两者不等价。第二个删除整个t 表。
  • @MattBall,对,但是你有s,它与t 在第一个查询中(在一天结束时)具有相同的行。让我做一个澄清的编辑......

标签: mysql select delete-row mysql-5.5 drop-table


【解决方案1】:

对于第二个查询,每当您在任何数据库中创建临时表时,都会对表空间进行碎片整理并降低数据库性能。我强烈建议不要采用第二种方法。

如果你真的想绝对确定你在做什么,你可以使用类似下面的代码:

/*
DELETE
-- */ SELECT *
FROM t
WHERE condition;

当您确定返回的行正是您要删除的行时,您可以轻松地在第一行的注释开头添加注释,例如:

-- /*
DELETE
-- */ SELECT *
FROM t
WHERE condition;

我在运行任何DELETE 语句之前使用相同的方法。

【讨论】:

    【解决方案2】:

    第一个要好得多,这就是为什么在 SQL 中存在删除命令的原因。 无需重新发明删除命令

    1- 当您想要删除某些行时,无需更改架构(创建 s,删除 t)。

    2- t 可能与您可能希望保留的其他表有关系。您甚至可能想要级联删除以删除其他一些表中的一些其他相关行,在删除时使用触发器......

    3- 至于您提到的在删除之前检查行的好处,您也可以在使用删除命令之前进行选择。

    4- 您的表格可能有链接到其他一些应用程序逻辑,比如说 ORM 类、用于报告的 SP 等等。您想在代码中创建新类还是更新现有 SP每次要删除几行?

    【讨论】:

      猜你喜欢
      • 2011-03-16
      • 2013-09-25
      • 1970-01-01
      • 1970-01-01
      • 2019-10-21
      • 2020-01-16
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多