sql-server-2008 - 此表的最快模式方法?

标签 sql-server-2008 indexing database-schema

我在 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 值。

我正在努力确保我使用的是键/索引的最佳策略。目前,我刚刚使用 IDScope(按此顺序)设置了主要的非聚集键。

最佳答案

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

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

我要补充的一件事是将您的主键聚类,以获得更好的性能。这比 N West 的添加聚簇索引的解决方案更可取,因为这样您将有两个重复的索引(PK 和聚簇索引),这会损害写入性能,而不会提高读取性能。最好简单地对您已有的索引进行聚类:主键。

编辑添加:由于您的表很少更新,因此使用 GUID 键字段不会像在经常更新的表上那样让您退缩。不理想,但在您的特定情况下,它的影响应该很小。

不过,在前几次必须手动将某人在便利贴上潦草地写到查询窗口中的 GUID 输入后,您可能会觉得很烦人。

关于sql-server-2008 - 此表的最快模式方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8495563/

相关文章:

sql-server - 数据库设计 - COUNTRY、CURRENCY int 或 varchar 的主键

sql-server - 学习 SQL Server 中的 XQuery()

javascript - 从另一个 json 数组项中查找数组项的索引

mysql - 如何在数据库中存储特定条目的访问者?

java - Hibernate 5.1 中的 EnversSchemaGenerator 在哪里?

mysql - 合并数据库中的两个表

c# - 我应该将 .pdf 文档保存到数据库还是需要搜索的文件夹中

sql-server - 命令成功完成,但...未创建表

indexing - Hash 和 Skiplists 索引并行吗?

elasticsearch - Elasticsearch 1.x添加时间戳的字段副本