描述如下:
我现在有一个这样的表,主要字段是
id 主键
score 分数
gamekind 游戏类型
数据量大概有300W条,我需要经常取每个游戏类型中对应的前N名的数据
应该怎么样最大化优化数据库
麻烦大家说说你们的想法
我现在有一个这样的表,主要字段是
id 主键
score 分数
gamekind 游戏类型
数据量大概有300W条,我需要经常取每个游戏类型中对应的前N名的数据
应该怎么样最大化优化数据库
麻烦大家说说你们的想法
FROM
(
SELECT rid=ROW_NUMBER() OVER(PARTITION BY gamekind ORDER BY SCORE DESC),*
FROM #T
) AS T
WHERE rid<=N
-- 建索引
create index [索引名] on [表名](gamekind,score)-- 然后逐个游戏类型查前N名
select top 10 * from [表名] where gamekind='[游戏类型]'
select top N * from tb order by 分数 desc--如果要考虑分数重复的情况,则如下:
--sql 2000
select * from
(
SELECT * , px = (SELECT COUNT(DISTINCT Score) FROM tb WHERE Score >= a.Score) FROM tb a
) t
where px between 1 and N--sql 2005
select * from
(
SELECT * , px = DENSE_RANK () OVER(order by score desc) from tb
) t
where px between 1 and N