2

我正在寻找一个最佳实践/想法,是否最好在调用删除之前进行选择计数并检查结果是否> 0,或者是否最好在数据库中盲目地触发删除语句,即使数据不存在。在我们的例子中,大多数时候数据将不存在。

那么更好的是:

Option 1: call Select Count(X) where foo, if result > 0, delete where foo

或者

Option 2: delete where foo

出于速度原因,我倾向于盲目删除,因为无论如何你都在打桌子。

编辑:这实际上发生在kettle(一个ETL工具)中,因此如果有删除,这三个操作将完全分开完成。所以完全在 SQL 中不是一个选项。

4

4 回答 4

4

我只想删除,如果您尝试删除不存在的内容,它只会删除 0(零)行。这也减少了前往数据库的次数。

于 2010-07-20T17:30:18.493 回答
4

我会说我会盲目地删除,然后取回受影响的行数。在任何一种情况下,比较都完成了,它应该是几乎相同的执行时间。

于 2010-07-20T17:30:19.530 回答
2

就去删除吧。事先发出 count(*) 没有任何好处。

于 2010-07-20T17:29:05.033 回答
0

通用的 IT 答案以“It Depends”开头

这里取决于Delete的查询计划。

如果您使用索引或更好的查询计划执行 EXISTS 查询(每个 OMG-Ponies),那会更好更快。

然后也许可以避免使用表扫描的不需要的删除。

于 2010-07-20T18:04:09.993 回答