首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

group by sum 优化,该怎么处理

2012-09-12 
group by sum 优化DBCC FREEPROCCACHEDBCC DROPCLEANBUFFERSset statistics io onSET STATISTICS time ONS

group by sum 优化
DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
set statistics io on
SET STATISTICS time ON

SELECT
  top 10
  [UserID]
  , sum([Score]) score
FROM 
  [users]  
group by 
  UserID
order by 
  Score desc

500w数据.
userid, 非聚焦索引
score 非聚焦索引

时间11秒.
测试电脑配置 amd640(3.0); 8G内存;

[解决办法]

SQL code
-->tryselect t.[UserID],sum(t.[Score]) Scorefrom(    SELECT top 10 [UserID],[Score]    FROM [users]       group by UserID    order by Score desc) t
[解决办法]
不好意思,上面那个写的有问题
[解决办法]
这还可以再优化?
[解决办法]
SQL code
-->try SELECT top 10 [UserID] into #tmp FROM [users] group by UserIDselect [UserID], sum([Score]) Score from [users]where [UserID] in (select t.[UserID] from #tmp t)order by Score desc--drop table #tmp
[解决办法]
发一下生成表结构的脚本看看
[解决办法]
探讨
引用:

SQL code

-->try
SELECT top 10 [UserID] into #tmp
FROM [users] group by UserID

select [UserID], sum([Score]) Score from [users]
where [UserID] in (select t.[UserID] from #tmp t)……

[解决办法]
SQL code
SELECT TOP 10        [UserID] ,        SUM([Score]) scoreFROM    [users]GROUP BY UserIDORDER BY Score DESC
[解决办法]
userid, 非聚焦索引
score 非聚焦索引 

把这个改成 userid和score 的联合索引试试。
[解决办法]
探讨
score 非聚焦索引

[解决办法]
最好的索引应该是:
SQL code
CREATE INDEX IXC_Userid_Score ON users (Userid) INCLUDE (Score)
[解决办法]
探讨

最好的索引应该是:
SQL code
CREATE INDEX IXC_Userid_Score ON users (Userid) INCLUDE (Score)


最快的方式应该算是索引视图:SQL code

SET NUMERIC_ROUNDABORT OFF;
SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL,……

[解决办法]
Score 总是需要sum,然后再对sum排序,所以score只要出现在索引的叶子层就足够了。
[解决办法]
22楼的最正确,索引的话,score在选择上面没用就不必要包括在索引列中了,会增加索引的大小。不过跟23楼的差不了多少的。
[解决办法]
探讨

Score 总是需要sum,然后再对sum排序,所以score只要出现在索引的叶子层就足够了。

[解决办法]
25楼你说的不错,差不多,就看索引的级别有多少了。
[解决办法]
探讨
最好的索引应该是:

SQL code
CREATE INDEX IXC_Userid_Score ON users (Userid) INCLUDE (Score)


最快的方式应该算是索引视图:

SQL code

SET NUMERIC_ROUNDABORT OFF;
SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIEL……



[解决办法]
的确是的,只要你的语句写的与视图定义基本相同,都不需要修改。
[解决办法]
膜拜大叔!神一样的回答!

热点排行
Bad Request.