作者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