我的数据库有一个非常大的表,其中包含20多亿行和3列。Id(唯一标识),类型(int,介于0-10之间。0=最常用。10 =最少使用),数据(1-10MB之间的二进制数据)
我可以用什么方法来优化这个数据库?(主要是select查询)
*注意:稍后我可能会在此表中添加更多列(例如: location、date...)
发布于 2010-12-09 07:56:34
假设id列是聚集索引键,并且假设uniqueidentity指的是uniqueidentifier
为什么?
众所周知,GUID是集群键的糟糕选择。
但是,不是顺序的GUID -例如在客户端(使用.NET)或由
()函数(在SQL Server中)生成它的值的GUID-可能是非常糟糕的选择-主要是因为它在基表中创建的碎片,但也因为它的大小。它的宽度是不必要的(它比基于int的标识宽4倍-这可以为您提供20亿(实际上是40亿)个唯一行)。而且,如果您需要超过20亿行,您总是可以使用bigint (8字节int)并获得2^63-1行
除此之外,您还需要做好功课,并提供此类问题所需的详细信息:准确的表和索引定义、流行的数据访问模式(按键、按范围、过滤器排序顺序、连接等)。
到目前为止,您是否做过任何工作来确定问题?如果没有,请从Waits and Queues开始,这是一种经过验证的识别性能瓶颈的方法。一旦你测量了并找到了需要改进的地方,我们就可以建议如何改进。
发布于 2010-12-09 07:56:23
更新以回应Remus的评论
https://stackoverflow.com/questions/4393507
复制相似问题