性能:我应该对数据库进行一次或多次查询

vld*_*jcc 1 c# t-sql sql-server

我有一个C#程序,必须处理大约10万个项目,并且ADO.NET访问sql server数据库,在程序的一部分我必须做出性能决定:

Durring处理,对于每个项目,我必须从数据库中读取数据:

我应该为每个项目查询一次数据库,还是应该在开头查询所有项目一次,并在内存中的c#对象中保留100 000行数据(大约10列 - int和string)并从中检索所需数据?

das*_*ght 5

如果你有一个合理的静态数据集,并且有足够的内存来预先读取所有内容,并保持结果缓存而不会使系统的其他部分缺乏内存,那么答案很简单:你应该这样做.

任何数据库操作的成本都有两个主要组成部分 - 数据传输的成本和往返的成本.在您的情况下,数据传输的成本是固定的,因为总的字节数不会根据您是一次全部检索它们还是一次获取一个块而改变.

往返的成本包括RDBMS从SQL语句中找出所需数据所需的时间,查找数据,并执行所需的所有锁定以确保为您提供的数据是一致的.单次往返并不昂贵,但当你做了10万次时,成本可能会变得过高.这就是为什么最好在内存配置允许的情况下立即读取数据.

另一个问题是您的数据有多动态.如果您在处理整个集合所花费的时间内数据发生变化的可能性很高,那么您可以采取其他预防措施,以确定在计算完成后是否需要重新处理任何内容.

  • 完成这样的操作后,另一个问题是数据是否会发生变化.如果您需要1ms来处理记录,并且您确信您的数据不会在100秒内发生变化,那么您可以在发生任何变更风险之前轻松处理所有100k记录.但是,如果处理记录需要1秒钟,那么在处理数据所需的27.78小时内数据可能会发生变化的可能性要高得多 (2认同)