加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:36:42 所属栏目:MsSql教程 来源:网络整理
导读:我有一个我想要优化的大桌子. 我正在使用MS-SQL 2005服务器.我会尝试描述它如何使用,如果有人有任何建议,我将非常感激. 该表约400GB,每天有1亿行和100万行插入. 该表有8列,1列数据col和7列用于查找/排序. k1 k2 k3 k4 k5 k6 k7 d1 哪里 k1: varchar(3),primar
我有一个我想要优化的大桌子.
我正在使用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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读