一个400GB表,一个查询 – 需要调优的想法(SQL2005)

前端之家收集整理的这篇文章主要介绍了一个400GB表,一个查询 – 需要调优的想法(SQL2005)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个我想要优化的大桌子.
我正在使用MS-sql 2005服务器.我会尝试描述它如何使用,如果有人有任何建议,我将非常感激.

该表约400GB,每天有1亿行和100万行插入.
该表有8列,1列数据col和7列用于查找/排序.

k1 k2 k3 k4 k5 k6 k7 d1

哪里

k1: varchar(3),primary key - clustered index,10 possible values
 k2: bigint,total rows/10 possible values
 k3: int,10 possible values
 k4: money,100 possible values
 k5: bool
 k6: bool
 k7: DateTime

只运行一个选择查询,如下所示:

SELECT TOP(g) d1 FROM table WITH(NOLOCK)
  WHERE k1 = a
  AND k3 = c
  AND k4 = d
  AND k5 = e
  AND k6 = f
  ORDER BY k7

其中g =大约100万
这个查询我们每天运行大约10次(经常在插件发生时),大约需要5-30分钟.

所以我目前在两个主键列上只有一个聚簇索引.我的问题是:我应该添加什么索引来改善这个查询性能

将每个列分开的索引是一个不错的选择?我认为一个索引将占用大约5-8GB. DB服务器总共有8GB RAM.

请不要说最好的事情是试验.这类似于“我不知道,工作出来你自己”:)

任何提示非常感谢!

由doofledorfer编辑 –

您在这里引发了过早优化的爆发,如果不是彻底的建议,“最好的事情是实验”.如果您需要有用的帮助,您需要澄清一些问题.

– doofledorfer

编辑:至于现在的帖子的评论现在在下面和查询计划一起发布
– 弗利堡先生

You are probably I/O bound

是的,它不是cpu限制.磁盘访问高.所有可用的RAM似乎都被使用.是否明智地使用还有待观察.

You say you can’t split the data because all the data is used: IMPOSSIBLE

我的意思是所有数据在某个时候被使用 – 并不是所有的数据都被每个用户在每个查询中使用.
我可以分解数据,但到目前为止,我不明白为什么分区表比使用聚簇索引更好.

Why did you choose these types
VARCHAR probably should have been INT as it can only be a few values. The rest are sensible enough,Money represents a money value in real life and bigint is an ID,and the bools are onny,offy type things

猜你在找的MsSQL相关文章