我有下面的代码,我想知道是否有一种更有效,更快捷的方法来进行此类缩放操作。这是一个监视程序,用于检查文件,如果没有在数据库中找到该记录,则将其插入。但是随着我们添加越来越多的目录来监视,我想知道性能问题。有没有一种更快的方法来检查,然后在一个sql命令中使用if(如果不存在)后接一个insert语句?感谢您的任何建议。
res/drawable
答案 0 :(得分:1)
这是反模式的一个明显例子。
您不应通过搜索相似的行然后插入来强制唯一性,因为它总是会遇到多用户/多线程问题。您无法使其防错,并且始终是不安全的。另一个用户可以在支票和插入之间的毫秒内插入一行。
通过添加数据库约束来增强唯一性,如:
hchart(x4 ,"wordcloud", hcaes(name = "n1", weight = "n2"))
这样,数据库负责检查。
您的唯一性查询似乎基于两列:alter table [table].[dbo].[tablename] add constraint unique_row
unique (col1, col2, col3, ... colN);
和Workflow_Step_Name
。如果是这种情况,那么以下约束将满足您的需求:
File_Name
然后,您只需插入而无需预先检查:数据库将为您执行检查。如果已经有另一行具有完全相同的值,则alter table [table].[dbo].[tablename] add constraint unique_file_name
unique (Workflow_Step_Name, File_Name);
将失败。
现在,如果您的应用程序是一个单用户应用程序,并且将一直存在,那么我猜您可以执行一个INSERT
来检查是否没有与该文件完全相同的行,然后执行SELECT
。无论如何,在数据库级别添加约束要安全得多,以防您的程序出现错误时保护数据。