作者wind681201 (阿風~~)
看板C_Sharp
標題[問題] 資料庫的對應效能
時間Fri May 16 16:22:08 2014
各位大大好,小弟有一個問題想請教:
我有一個網頁的列表需求,裡面是用戶寫的一個需求資訊。
Data1 --SQL:裡面是放主單資料,其中有一個欄位是狀態編號。
且,因為一些因素,狀態可以讓我們新增,這個部份是放在Access中。
Data2 --Access:欄位為id, statname
我要抓的列表很簡單,就是在主單抓好後,我要將狀態的中文名稱也show出來。
我目前是先用列舉,將主單抓出後,在用新的型別去對應狀態名稱。
ac = accessclass
方法一:
var a = from d in data1
select {.name = d.name,
.statname = ac.getstatname(d.statno)}
ps: getstatname這個會回傳一個String,裡面是用DataReader的方式去抓,
所以,若有十筆,就會出現十次連線。
方法二:
var a = from d in data1
select {.name = d.name,
.statname = (from d2 in access.asenumerable()
where d2.id = d.statno
select d2.statname).first()}
這二種,我都試過了,測出來的秒數,300ms
想請問,有沒有更好的方式去作這樣的東西?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 203.71.67.243
※ 文章網址: http://www.ptt.cc/bbs/C_Sharp/M.1400228532.A.AB6.html
推 m339606:把access的資料快取或直接並入sql來inner join 05/16 17:48
→ wind681201:有試過join了,但最低有80ms,有時還是會150ms 05/16 20:36
→ m339606:將statname直接快取在記憶體中,資料單純撈主資料 05/16 21:21
→ m339606:如果資料龐大又會讀取過久採用分段顯示或事先快取比較好 05/16 21:25
→ wind681201:若放在記憶體中,還是需要比對才能抓值,效能會比較好 05/16 21:30
→ wind681201:嗎? 記憶體是指,session的嗎? 05/16 21:31
→ ssccg:其實你列的作法就是在記憶體中比對了啊,快取在記憶體是差在 05/17 09:33
→ ssccg:不用每次再去access撈而已 05/17 09:33
→ wind681201:但是現在要130ms能不能再快一點? 05/17 14:40
→ Litfal:問個基本的問題:索引有設吧...? 05/17 23:56
→ wind681201:有設索引 05/18 21:52