描述如下:
我现在有一个这样的表,主要字段是
id 主键
score 分数
gamekind 游戏类型
数据量大概有300W条,我需要经常取每个游戏类型中对应的前N名的数据
应该怎么样最大化优化数据库
麻烦大家说说你们的想法

解决方案 »

  1.   

    SELECT ID,SCORE,gamekind
    FROM
    (
       SELECT rid=ROW_NUMBER() OVER(PARTITION BY gamekind ORDER BY SCORE DESC),*
       FROM #T
    ) AS T
    WHERE rid<=N
      

  2.   


    -- 建索引
    create index [索引名] on [表名](gamekind,score)-- 然后逐个游戏类型查前N名
    select top 10 * from [表名] where gamekind='[游戏类型]'
      

  3.   

    --如果不考虑分数重复,则可以直接使用top N即可.
    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