作者talenttb (CC)
看板Database
標題[SQL ] MSSQL效能問題請教
時間Mon Mar 4 23:20:16 2013
使用MS SQL 2008 R2
要做一個統計的SQL查詢
資料大概是長這樣
SomeTbl
from to actiontype who_do_it . . .
------------------------------------------------------------------------
台灣-台北-大同區 台灣-高雄-岡山 4 kevin
台灣-台北-中山區 台灣-台北-淡水 6 john
台灣-新北-土城 台灣-桃園-桃園 6 john
.
.
.
大概是這樣的資料三百萬筆左右
想請問的問題有下列幾點
1.
"誰"做了幾項。
使用cursor,把人員表當作變數一筆一筆往下查詢(我有將cursor設read only,不知道
會不會快一點)。
2.
我想查詢從北部出發的,包含台北、新北、桃園。
select count(1) from SomeTbl where [from] like '%台北%' or [from] like '%新北%'
or [from] like '%桃園%'
3.
跟第二點很像,不過是反向查詢,查詢不是從台北出發。
我將條件前面放一個not
select count(1) from SomeTbl where not ([from] like '%台北%' or [from] like '%新北%'
or [from] like '%桃園%')
查詢浪費時間的就是去計算"一個人從北部出發的次數,非北部出發的次數,
北部回來的次數,非北部回來的次數"
人員大約一千人,搭配SomeTbl(資料三百萬筆),這樣會花很多時間。
因為資料量不算小,不知道還有沒有小細節可以修的更好。
對了這個會寫成store procedure。
感謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.163.19.70
1F:推 g66932007:直接跟員工表作JOIN就好啦 不用迴圈跑吧 03/04 23:41
2F:推 g66932007:FROM跟TO各拆成三格欄位儲存,就不用用到LIKE指令 03/04 23:44
3F:→ talenttb:因為他要算每個人,join起來好像很難統計 03/04 23:47
4F:→ talenttb:重點是他不讓我重構schema 03/04 23:48
5F:推 bohei:所以要查的是人跟次數嗎? 03/05 00:37
6F:→ talenttb:是的 03/05 07:20