我在 SQL Server 2008 数据库中有下表:
ID UNIQUEIDENTIFIER NOT NULL
范围 CHAR(5) NOT NULL
数据 NVARCHAR(MAX)
该表很少被修改,但经常使用
SELECT Data
WHERE ID = @X
AND Scope = @Y
命令。
Data
可以是从空白到几页文本的任何内容。 ID+Scope
将始终是唯一的。该表将包含几千个唯一 ID 和少于 20 个唯一 Scope
值。
我正在努力确保我使用的是键/索引的最佳策略。目前,我刚刚使用 ID
和 Scope
(按此顺序)设置了主要的非聚集键。
最佳答案
假设 ID 本身不是唯一的,并且您不倾向于将 ID 类型更改为 INT,那么您所做的几乎是最优的。
- 您正在使用 nvarchar(max) 而不是 ntext - 这会表现得更好,并且 ntext 已计划弃用
- 您的主键首先在最具选择性的列 (ID) 上排序
我要补充的一件事是将您的主键聚类,以获得更好的性能。这比 N West 的添加聚簇索引的解决方案更可取,因为这样您将有两个重复的索引(PK 和聚簇索引),这会损害写入性能,而不会提高读取性能。最好简单地对您已有的索引进行聚类:主键。
编辑添加:由于您的表很少更新,因此使用 GUID 键字段不会像在经常更新的表上那样让您退缩。不理想,但在您的特定情况下,它的影响应该很小。
不过,在前几次必须手动将某人在便利贴上潦草地写到查询窗口中的 GUID 输入后,您可能会觉得很烦人。
关于sql-server-2008 - 此表的最快模式方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8495563/