C# WinC窗体查询MS Access的最快方法

C# WinC窗体查询MS Access的最快方法,c#,winforms,ms-access,C#,Winforms,Ms Access,这可能是个愚蠢的问题,但我想确定一下。我正在创建Winforms应用程序,并使用c oledbconnection连接到MS Access数据库。现在,我正在使用SELECT*FROM table_名称并循环遍历每一行,以查看它是否是符合我所需条件的行,如果是,则中断循环。我想知道如果我使用类似SELECT*FROM table_name WHERE id=something这样的东西,性能是否会得到改善,因此基本上使用WHERE语句而不是在每一行中循环?验证任何东西的性能的最佳方法是测试。否则

这可能是个愚蠢的问题,但我想确定一下。我正在创建Winforms应用程序,并使用c oledbconnection连接到MS Access数据库。现在,我正在使用SELECT*FROM table_名称并循环遍历每一行,以查看它是否是符合我所需条件的行,如果是,则中断循环。我想知道如果我使用类似SELECT*FROM table_name WHERE id=something这样的东西,性能是否会得到改善,因此基本上使用WHERE语句而不是在每一行中循环?

验证任何东西的性能的最佳方法是测试。否则,我们会根据绩效的实际情况对什么是最好的进行大量假设

也就是说,100%的时间使用WHERE子句比检索数据然后通过循环过滤要好。这有几个不同的原因,但最终您是在检索所有列之前过滤列上的数据,而不是检索所有列然后过滤掉数据。关系数据应该根据集合逻辑来处理,根据数据集,WHERE子句就是这样工作的。循环不是设置逻辑,而是比较每一行,代价很高,丢弃那些不符合条件的行

不过别相信我的话。试试看。尤其是当您的应用程序表中有大量数据时,请尝试使用它。

当然可以

如果你有一个access数据库文件,比如说文件夹上的共享文件。然后将.net桌面应用程序部署到每个工作站

而且,假设这个表有一百万行

如果您这样做:

SELECT * from tblInvoice WHERE InvoiceNumber = 123245
然后,只有一行沿着网络管道向下拉-即使该表有100万行,也是如此。遍历和拉取100万行需要花费大量的时间,但是如果在select中添加条件,那么在这种情况下,拉取一行比拉取整个表快100万倍


如果这是/曾经是多用户?然后,即使是在网络上,也只会提取一条符合条件的记录。网络上这一行拉的唯一要求是什么?Access数据引擎需要有一个关于该条件的可用索引。当然,默认情况下,PK列ID始终具有该索引-因此无需担心。但是,如果按照上面的方法,我们从一个表中提取发票号,那么数据引擎只需在该列InvoiceNumber上建立索引即可提取一行。如果无法使用索引,则后台的所有行都将被拉入,直到匹配发生。这意味着,如果没有索引,将通过网络拉入大量数据,或者如果是本地数据,则将从磁盘上的文件中拉入大量数据。

您试过了吗?如果没有WHERE,数据库将向您的应用程序传输更多数据。随着行数的增加,或者数据库托管在云端或本地设备以外的其他地方,这一点会更加明显。将所有数据下载到客户端可能需要10分钟,但数据库的搜索速度可能要快得多。