SUM速度慢

zhengshouquan 2013-10-09 04:51:29
select *
from cj_record WITH(NOLOCK) WHERE order_no = 'PD-20130823-0018'

检索出来的数据有7万多条,大概花了6到7秒完成

select order_no,sum(period_time)
from cj_record WITH(NOLOCK) WHERE order_no = 'PD-20130823-0018'
group by order_no

而统计period_time这个数值则花掉6秒左右时间。

order_no字段为非集聚索引,cj_record大概有300万条记录。

请问各位大虾,如何才能优化数据库,使得统计数据更快!
谢谢了!

...全文
159 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengshouquan 2013-10-10
  • 打赏
  • 举报
回复
谢谢各位,增加复合索引order_no,period_time一下子提高了
zhaowei303 2013-10-10
  • 打赏
  • 举报
回复
只需要在record表上建聚集复合索引order_no,period_time,或者建非聚集复合索引order_no,period_time采用include看看那个速度快就选择那个。
LongRui888 2013-10-09
  • 打赏
  • 举报
回复
引用 6 楼 x_wy46 的回复:
[quote=引用 5 楼 yupeigu 的回复:] 建立索引,速度应该能提升:
create index idx_cj_record_op on cj_record(order_no,period_time)
我比较支持2楼的做法,include索引[/quote] include也可以的,采用include后,在建索引时就不用对period_time列进行排序了,可以省点力。
专注or全面 2013-10-09
  • 打赏
  • 举报
回复
引用 5 楼 yupeigu 的回复:
建立索引,速度应该能提升:
create index idx_cj_record_op on cj_record(order_no,period_time)
我比较支持2楼的做法,include索引
LongRui888 2013-10-09
  • 打赏
  • 举报
回复
建立索引,速度应该能提升:
create index idx_cj_record_op on cj_record(order_no,period_time)
专注or全面 2013-10-09
  • 打赏
  • 举报
回复
select order_no,sum(period_time) from cj_record WITH(NOLOCK) WHERE order_no = 'PD-20130823-0018' group by order_no 你sql写的有问题吧? WHERE order_no = 'PD-20130823-0018' group by order_no 这有意义吗?
shoppo0505 2013-10-09
  • 打赏
  • 举报
回复
在order_no字段的非集聚索引上include 入period_time列看看。
Q315054403 2013-10-09
  • 打赏
  • 举报
回复
建OrderNo+Period_Time包含索引就OK 2008支持 OrderNo Include (Period_Time) 2005忘了是否支持
發糞塗牆 2013-10-09
  • 打赏
  • 举报
回复
初步判断应该是排序导致的,尝试: 方法1、在period_time和order_no上创建一个非聚集索引,即两列组合一个索引 方法2、把order_no改为聚集索引,不过这个方法通常都不可行。 另外给出执行计划看看。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧