当前位置: 首页 > 编程语言 > C#

查询网络文件夹中的Access数据库的C#程序比查询本地副本花费的时间更长分享

时间:2023-04-10 16:13:42 C#

C#学习教程:查询网络文件夹中的Access数据库的C#程序比查询本地副本需要更长的时间我有一个使用MSAccess数据库(.mdb文件)的C#应用程序。我与网络用户共享我的数据库,以便他们可以使用我的应用程序访问数据库。当我运行我的应用程序时,在网络数据库上执行查询需要更长的时间,而相同的查询在本地机器上花费的时间更少。任何人都可以提供有关如何减少网络共享上的Access数据库的性能问题的建议吗?当然,通过网络访问数据库的查询不会像访问本地硬盘驱动器上的数据库的查询一样快。不幸的是,开发人员构建的应用程序在本地运行良好,但一旦部署到网络上就会明显变慢,这是很常见的。(这对任何开发人员都是如此,不仅仅是那些使用Access数据库的开发人员。)根据我的经验,使用共享Access数据库与应用程序性能相关的三个最重要的事情是:正确索引的表扫描就像共享文件数据库上的谋杀像访问。确保在WHERE子句或JOIN表中使用的字段上有索引。为了说明这一点,我在一个122MB的.accdb文件上运行了以下命令,其中包含一个包含421,184行的表:cmd.CommandText="SELECTCOUNT(*)ASnFROMzz_sys_archive"+"WHEREarchivedBetween#2013-01-01#And#2013-04-01#";如果未为[archived]字段编制索引,则该命令需要78秒才能执行并生成107MB的网络流量。在[archived]字段中添加索引后,该命令执行时间为0.4秒,并产生了0.9MB的网络流量。(但是,不要疯狂地索引所有内容,因为无关的索引只会减慢INSERT和UPDATE操作的速度。)智能查询即使有适当的索引,设计不当的查询也会导致表扫描并减慢您的应用程序。例如,查询cmd.CommandText="SELECTCOUNT(*)ASnFROMzz_sys_archive"+"WHEREYear(archived)=2013";不是可搜索的,这意味着它不能使用[archived]字段上的索引,而是使用与之前相同的表扫描结果(大约80秒完成)。但是,等效查询cmd.CommandText="SELECTCOUNT(*)ASnFROMzz_sys_archive"+"WHEREarchived>=#2013-01-01#ANDarchived执行大约一秒钟。不要读你不读的东西需要使用本地数据库,通常很容易只读取整个表而忽略你不想要的东西。通过网络访问数据库会变得更昂贵,所以在“SELECT*FROMwherewhere”之前想想你真正需要什么。以上是C#学习教程:C#程序查询网络文件夹中的Access数据库比查询本地副本耗时更长。所有内容分享,如果对大家有用需要详细了解C#学习教程,希望大家多多关注---本文收集自网络,不代表立场,如涉及侵权,请点击右下角联系管理员删除,如有转载,请注明出处: