【发布时间】:2013-01-13 18:34:15
【问题描述】:
这是一个间接需求,但我想知道您在性能和设计方面有什么建议。
当你需要做某事时,什么会更快更好?检查你是否可以,如果你能做到。或者直接试一试,万一失败,你就明白执行的意思了。
这是我的特殊情况: 我有一个数据库表,我将使用 foreach 填充它。该表有一个不能在表中重复的主键。
所以..
foreach(object in Objects)
{
bool exists = //SQL SELECT to check if exists.
if (exists == false)
{
//SQL INSERT
return INSERTED
}
else
{
return failed
}
}
或
foreach(object in Objects)
{
try
{
//SQL INSERT
return INSERTED
}
catch
{
return FAILED
}
}
我想知道其他方面的最佳实践,例如创建不带覆盖属性的文件并管理 execpiton 或在尝试之前检查文件是否存在。
更新: 根据答案,我知道我不应该为每个插入进行事务,因为性能。我应该做一个批量插入。 在我的代码中,我有这样的东西
//SQL Start Transaction
foreach
{
//SQL INSERT
}
//SQL Commit transaction
我的问题是关于事务内部,我应该在插入之前检查还是只是尝试。
【问题讨论】:
-
取决于重复的相对数量...
-
我可以预测,但我认为平均值可能是 10 的 1。
标签: c# sql performance optimization database-performance