2010-12-08 121 views
2

我的数据库有一个非常大的表,超过20亿行3列。 Id(uniqueidentity),Type(int,0-10。0 =最常用,10 =最少使用),数据(1-10MB之间的二进制数据)优化sql server数据库

有什么方法可以优化这个数据库? (主要是选择查询)

*注:我以后可能会添加更多的列到这个表(如:位置,日期等)

+0

你使用的是什么版本?有些想法只是企业版。 – 2010-12-08 23:49:09

+0

2008企业版 – Joanne 2010-12-08 23:51:48

+0

你能提供一些关于如何查询这些数据的例子吗?按类型?通过ID? – Joe 2010-12-09 00:11:10

回答

1
  • 添加索引(ES)。确定哪些列是最合适的聚集索引。

  • 决定是否存储二进制数据的10MB每个(否则小)行中是一个很好用的数据库的

5

[响应于Remus的评论已更新]假设id柱是聚集索引键,并假设通过uniqueidentity你的意思是uniqueidentifier

  • 你需要的uniqueidentifier TY PE?为什么?
  • 您考虑了其他替代方案吗?
  • 您是否使用顺序GUID填充数据?

GUID是一个众所周知的穷人群集键的选择。对于更详细的讨论参见GUIDs as PRIMARY KEYs and/or the clustering key

但是,一个GUID是不连续的 - 像一个有它的价值在客户端生成 (使用.NET) 或者由NEWID()函数 产生(在SQL Server中)可能是一个可怕的错误 的选择 - 主要是因为它在 基表中创建的 碎片,但也是因为它的大小为 。这是不必要的宽度(它比基于整数的身份 宽4 - 这可以给你20亿(真的,40亿)独特的行)。而且, 如果你需要超过2十亿你 总是可以用BIGINT(8字节 INT)去得到2^63-1行

又读Disk space is cheap...That's not the point!作为跟进。

除此之外,你需要做的功课,并张贴了这样一个问题所需的详细信息:通过一系列确切表和索引的定义,普遍的数据访问模式(按键,过滤排序顺序,连接等等等等)。

到目前为止,您是否做过任何工作以发现问题?如果不是,请从Waits and Queues开始,这是一种经过验证的方法,可用于识别性能瓶颈。一旦你衡量并找到需要改进的地方,我们可以建议如何改进。