簡體   English   中英

C# Winforms 查詢 MS Access 的最快方法

[英]C# Winforms Fastest Way To Query MS Access

這可能是一個愚蠢的問題,但我想確定一下。 我正在創建一個 Winforms 應用程序,並使用 c# oledbconnection 連接到 MS Access 數據庫。 現在,我正在使用“SELECT * FROM table_name”並遍歷每一行以查看它是否是符合我想要的條件的行,如果是,則退出循環。 我想知道如果我使用“SELECT * FROM table_name WHERE id=something”之類的東西是否會提高性能,所以基本上使用“WHERE”語句而不是遍歷每一行?

驗證任何事物的性能的最好方法是測試。 否則,很多假設是關於什么是最好的,而不是實際的性能。

話雖如此,100% 的時間使用 WHERE 子句將比檢索數據然后通過循環過濾要好。 這是出於幾個不同的原因,但最終您是在檢索所有列之前過濾列上的數據,而不是檢索所有列然后過濾掉數據。 關系數據應該根據集合邏輯處理,這就是 WHERE 子句的工作方式,根據數據集。 該循環沒有設置邏輯並比較每個單獨的行,代價高昂,丟棄那些不符合標准的行。

不過,不要相信我的話。 試試看。 特別是當您的應用程序在表中有大量數據時嘗試一下。

當然是。

如果您有訪問數據庫文件 - 比如說在文件夾上共享。 然后將您的 .net 桌面應用程序部署到每個工作站?

此外,假設該表有 100 萬行。

如果你這樣做:

SELECT * from tblInvoice WHERE InvoiceNumber = 123245

然后只有一行被拉下網絡 pipe - 即使表有 100 萬行,這仍然適用。 遍歷並拉取 100 萬行將花費大量時間,但如果您將條件添加到 select 中,那么在這種情況下拉取一行將比拉取整個表快 100 萬倍。

並說這是否是/曾經是多用戶? 再說一次,即使在網絡上 - 也只會提取一條符合您的標准的記錄。 網絡上這種“單排拉”的唯一要求是什么? 訪問數據引擎需要有一個關於該標准的可用索引。 當然,默認情況下,PK 列(ID)總是有那個索引——所以不用擔心。 但是,如果按照上述我們從表中提取發票編號 - 那么數據引擎需要在該列上具有索引(InvoiceNumber)才能僅提取一行。 如果沒有索引可以使用——那么所有的幕后行都被拉出,直到匹配發生——並且通過網絡,那么這意味着大量的數據將在沒有該索引的情況下通過該網絡被拉出(或者如果是本地的——然后從磁盤上的文件)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM