这张表最快的架构方法?

时间:2011-12-13 20:15:29

标签: sql-server-2008 indexing database-schema

我在SQL Server 2008数据库中有下表:

  • ID UNIQUEIDENTIFIER NOT NULL
  • Scope CHAR(5) NOT NULL
  • Data NVARCHAR(MAX)

该表很少被修改,但经常使用

进行访问
SELECT Data 
WHERE ID = @X 
AND Scope = @Y

命令。

Data可以是从空文本到几页文本的任何内容。 ID+Scope永远是唯一的。该表将包含几千个唯一ID和少于20个唯一Scope值。

我正在努力确保我使用最佳的密钥/索引策略。目前,我刚刚使用IDScope(按此顺序)获得了主要非群集密钥集。

2 个答案:

答案 0 :(得分:3)

CREATE UNIQUE CLUSTERED INDEX ON <TableName> (ID, Scope)

使用聚簇索引可以加快查询速度,因为您只需遍历树来获取每个ID /范围。

请注意,使用GUID会很慢。但它会比堆或非聚集扫描更快......

答案 1 :(得分:3)

假设ID本身唯一,并且您不打算将ID类型更改为INT,那么您所做的几乎是最佳的。

  • 您正在使用nvarchar(max)而不是ntext - 这将表现更好,ntext计划弃用
  • 您的主键首先在最具选择性的列(ID)上排序

我要添加的一件事是群集主键,以获得更好的性能。这比N West的添加聚簇索引的解决方案更可取,因为那样你就会有两个重复的索引(PK和聚簇索引),它们会影响写入性能而读取没有性能提升。最好简单地对您已有的索引进行聚类:主键。

编辑添加:由于您的表很少更新,因此使用GUID键字段不应该像在频繁更新的表上那样将其设置回来。不理想,但在特定的情况下,它应该影响很小。

但是,在最初几次你必须手动输入一个在Post-It上潦草地绘制到查询窗口中的GUID之后,你可能会觉得很烦人。