Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 每次从数据库检索数据库记录时都要更新它-这是一种好的做法吗?_C#_Sql_Database - Fatal编程技术网

C# 每次从数据库检索数据库记录时都要更新它-这是一种好的做法吗?

C# 每次从数据库检索数据库记录时都要更新它-这是一种好的做法吗?,c#,sql,database,C#,Sql,Database,我使用的是sql server,我有一个特定的表,最多可以包含约100万到1000万个recrdords 在我检索到的每个记录中,我都做一些检查(我运行了几行简单的代码),然后我想标记这些记录是在DateTime中检查的; 所以我要做的是检索一条记录,检查一些内容,运行一个“更新”查询,将“last_checked_time”字段设置为DateTime。现在,然后移动到下一条记录。 然后,我可以按“上次检查时间”字段(升序)获取所有记录,然后我可以按检查时间对它们进行迭代 这是一种好的做法吗?只

我使用的是sql server,我有一个特定的表,最多可以包含约100万到1000万个recrdords

在我检索到的每个记录中,我都做一些检查(我运行了几行简单的代码),然后我想标记这些记录是在DateTime中检查的; 所以我要做的是检索一条记录,检查一些内容,运行一个“更新”查询,将“last_checked_time”字段设置为DateTime。现在,然后移动到下一条记录。 然后,我可以按“上次检查时间”字段(升序)获取所有记录,然后我可以按检查时间对它们进行迭代

这是一种好的做法吗?只要我在那张桌子上的记录不超过1000万条,它还能保持速度吗

我在某个地方读到,每个“更新”查询实际上都是一个删除和一个新记录的创建

我还想提一下,这些记录将被我的ASP.net网站频繁检索


我想在本地txt文件/二进制文件上写下“上次检查时间”,但我猜这意味着实现一些数据库已经可以为您完成的事情

就我个人而言,我看不出有什么问题。将上次检查的时间存储在数据库中似乎非常合理,特别是因为它可能用于查询(例如,查找一周内未检入的记录)。

如果需要“上次检查的时间”值,那么保存它的最佳、最有效的位置就是表中的行。不管表中有多少行,每次更新都只会影响更新的行

如何实现更新取决于DBMS,但通常不是通过删除和重新插入行来完成的。

也许(只是也许)您可以创建一个包含两行的新表:第一个表中的行id和检查日期


这样,您就不会更改原始表,但根据数据的使用情况和检查日期,您将被迫执行联合查询,这可能是您也不想执行的操作。

我建议检索您的数据或部分数据,对所有这些数据库进行检查,并将更新发送回事务中,以使数据库更有效地运行。这将减少往返行程


至于这是否是一个好的实践,我会说是的,尤其是因为您在查询中使用了。当然,不要将上次检查的时间存储在文件中,并在加载数据库数据后尝试匹配。数据库RDBMS旨在为您高效地处理此问题。不要使用多维数据集重新设计轮子。

将“已检查时间”存储为要更新的行的一部分,而不是存储在单独的文件或数据库中的单独表中是有意义的。此方法应提供最佳性能,并有助于保持一致性。涉及多个表或外部数据存储的解决方案可能会引入分布式或多表事务更新的需求,这些更新涉及大量锁定,这可能会对性能产生负面影响,并使保证一致性变得更加困难


总的来说,最小化事务范围并通过扩展锁定的解决方案是值得努力的。此外,简单本身也是一个有用的目标。

为什么需要检查时间?你到底在查什么?这是否可以通过在数据库中使用适当的控件来处理?例外情况是,我会将更新作为基于批处理集的更新发送回,比单个更新快得多。@HLGEM:您还没有详细描述您的用例,但您必须决定是否可以将多个更新排队并成批发送,或者,如果您需要单个更新提供的较低延迟。