我在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
值。
我正在努力确保我使用最佳的密钥/索引策略。目前,我刚刚使用ID
和Scope
(按此顺序)获得了主要非群集密钥集。
答案 0 :(得分:3)
CREATE UNIQUE CLUSTERED INDEX ON <TableName> (ID, Scope)
使用聚簇索引可以加快查询速度,因为您只需遍历树来获取每个ID /范围。
请注意,使用GUID会很慢。但它会比堆或非聚集扫描更快......
答案 1 :(得分:3)
假设ID本身不唯一,并且您不打算将ID类型更改为INT,那么您所做的几乎是最佳的。
我要添加的一件事是群集主键,以获得更好的性能。这比N West的添加聚簇索引的解决方案更可取,因为那样你就会有两个重复的索引(PK和聚簇索引),它们会影响写入性能而读取没有性能提升。最好简单地对您已有的索引进行聚类:主键。
编辑添加:由于您的表很少更新,因此使用GUID键字段不应该像在频繁更新的表上那样将其设置回来。不理想,但在特定的情况下,它应该影响很小。
但是,在最初几次你必须手动输入一个在Post-It上潦草地绘制到查询窗口中的GUID之后,你可能会觉得很烦人。