詢問關於DB效能問題

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

差別在開啟db與撈資料的筆數 哪一個方法效能更好呢?
Allen
FirstOrDefault只會取得集合裡的第一筆, 所以比較好的方法,是直接從db裡只取出一筆
Xin Ru Wang
謝謝一樓回覆
所以比起一次撈出全部資料再做欄位選取,多次開db會是比較優先的方法?
Allen
不太理解你的意思,你直接取出一筆記錄的三個欄位值,就好了
Xin Ru Wang
我主要想問的是
一次把一張表的資料全撈出來,再指定到對應變數
或是
針對不同的變數做多次db開關
何者效能較優?

最有價值解答

Allen
一次就直接找出一筆記錄的三個欄位值,並且只放在一個變數裡就完成了,不必放在三個變數裡
如果你想比較的第二種作法是先找出該筆記錄的第一欄,再重複做三次,這做法當然就是比較不好的,不過它會慢多少?倒是不一定會很明顯,但可能會被同事笑
Xin Ru Wang
好的,我了解了,因為原先是採用第一種做法,被指教使用第二種,所以有些疑問上來發問,謝謝您耐心回答。
Allen
你可以把二種寫法都列出來,由於第二種方法顯然比較不好,但卻有人建議你,也許這中間有什麼你没提及的原因
Xin Ru Wang
            var member = inDB.Members.ToList(); //假設十萬多筆資料
            var mAccount = member.FirstOrDefault().Account;
            var mName = member.FirstOrDefault().Name;
            var mJob = member.FirstOrDefault().JobTitle;

            var _mAccount = inDB.Members.FirstOrDefault().Account;
            var _mName = inDB.Members.FirstOrDefault().Name;
            var _mJob = inDB.Members.FirstOrDefault().JobTitle;


一時找不到較複雜的範例,簡單來說就是這個的區別而已。
Xin Ru Wang
補充一下 當然可以 var member = inDB.Members.FirstOrDefault();
但受到建議是為更複雜的需求
Allen
var member = inDB.Members.FirstOrDefault();
// 判斷是否有值

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

如果有更複雜要求,請說明,不然,就參考上方寫法
Allen
你的第一行,直接全取出並tolist,是非常糟的寫法
Xin Ru Wang
請問toList()為何呢?
Allen
Tolist是把所有記錄都取出並放在記憶體,但你其實只要一筆,所以應該取出一筆就好了。
Xin Ru Wang
啊啊 好的 理解了 謝謝指教
Allen
所以,你二個寫法都不好
回到頂部