台灣最大程式設計社群網站
線上人數
1225
 
會員總數:246053
討論主題:189637
歡迎您免費加入會員
討論區列表 >> C# >> 詢問關於DB效能問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
詢問關於DB效能問題
價值 : 10 QP  點閱數:217 回應數:15
樓主

Xin Ru Wang
門外漢
0 15
178 19
發送站內信

如題,C#新手想請教若假設單張資料表有100000筆甚至更多資料,
那我在使用linq做查詢時,需要三個欄位值各存到三個變數中,
方法1:
先做一次查詢(從撈出十萬筆資料),再用FirstOrDefault.欄位名稱個別丟到三個變數中
方法2:
先宣告三個變數,再對三個變數宣告三次db直接針對條件FirstOrDefault

差別在開啟db與撈資料的筆數 哪一個方法效能更好呢?

搜尋相關Tags的文章: [ db ] , [ linq ] , [ 效能 ] ,
本篇文章發表於2020-09-14 11:11
1樓
回應

Allen
捐贈 VP 給 Allen 檢舉此回應
FirstOrDefault只會取得集合裡的第一筆, 所以比較好的方法,是直接從db裡只取出一筆
本篇文章回覆於2020-09-14 15:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

Xin Ru Wang
檢舉此回應
謝謝一樓回覆
所以比起一次撈出全部資料再做欄位選取,多次開db會是比較優先的方法?
本篇文章回覆於2020-09-14 15:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

Allen
捐贈 VP 給 Allen 檢舉此回應
不太理解你的意思,你直接取出一筆記錄的三個欄位值,就好了
本篇文章回覆於2020-09-14 15:28
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

Xin Ru Wang
檢舉此回應
我主要想問的是
一次把一張表的資料全撈出來,再指定到對應變數
或是
針對不同的變數做多次db開關
何者效能較優?
本篇文章回覆於2020-09-14 15:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
最有價值解答

Allen
捐贈 VP 給 Allen 檢舉此回應
一次就直接找出一筆記錄的三個欄位值,並且只放在一個變數裡就完成了,不必放在三個變數裡
如果你想比較的第二種作法是先找出該筆記錄的第一欄,再重複做三次,這做法當然就是比較不好的,不過它會慢多少?倒是不一定會很明顯,但可能會被同事笑
本篇文章回覆於2020-09-14 15:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

Xin Ru Wang
檢舉此回應
好的,我了解了,因為原先是採用第一種做法,被指教使用第二種,所以有些疑問上來發問,謝謝您耐心回答。
本篇文章回覆於2020-09-14 16:22
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

Allen
捐贈 VP 給 Allen 檢舉此回應
你可以把二種寫法都列出來,由於第二種方法顯然比較不好,但卻有人建議你,也許這中間有什麼你没提及的原因
本篇文章回覆於2020-09-14 16:25
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

Xin Ru Wang
檢舉此回應


一時找不到較複雜的範例,簡單來說就是這個的區別而已。
本篇文章回覆於2020-09-14 17:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

Xin Ru Wang
檢舉此回應
補充一下 當然可以 var member = inDB.Members.FirstOrDefault();
但受到建議是為更複雜的需求
本篇文章回覆於2020-09-14 17:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

Allen
捐贈 VP 給 Allen 檢舉此回應
var member = inDB.Members.FirstOrDefault();
// 判斷是否有值

//有值才取
var mAccount = member.Account;
var mName = member.Name;
var mJob = member.JobTitle;

如果有更複雜要求,請說明,不然,就參考上方寫法
本篇文章回覆於2020-09-14 17:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

Allen
捐贈 VP 給 Allen 檢舉此回應
你的第一行,直接全取出並tolist,是非常糟的寫法
本篇文章回覆於2020-09-14 17:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
作者回應

Xin Ru Wang
檢舉此回應
請問toList()為何呢?
本篇文章回覆於2020-09-14 18:02
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
回應

Allen
捐贈 VP 給 Allen 檢舉此回應
Tolist是把所有記錄都取出並放在記憶體,但你其實只要一筆,所以應該取出一筆就好了。
本篇文章回覆於2020-09-14 18:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
作者回應

Xin Ru Wang
檢舉此回應
啊啊 好的 理解了 謝謝指教
本篇文章回覆於2020-09-14 18:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
回應

Allen
捐贈 VP 給 Allen 檢舉此回應
所以,你二個寫法都不好
本篇文章回覆於2020-09-14 18:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.