【发布时间】:2011-12-13 20:15:28
【问题描述】:
我在 SQL Server 2008 数据库中有下表:
ID UNIQUEIDENTIFIER NOT NULLScope CHAR(5) NOT NULLData NVARCHAR(MAX)
该表很少被修改,但经常使用 a 访问
SELECT Data
WHERE ID = @X
AND Scope = @Y
命令。
Data 可以是从空白到几页文本的任何内容。 ID+Scope 将永远是独一无二的。该表将包含几千个唯一 ID 和少于 20 个唯一 Scope 值。
我正在努力确保我对键/索引使用了最佳策略。目前,我刚刚使用ID 和Scope(按此顺序)获得了主要的非集群密钥集。
【问题讨论】:
-
为什么使用 uniqueidentifier,int 或 bigint 有巨大的空间。世界上只有少数几个数据库会拥有超出其限制的表。仅此一项就可以减少事情并因此加快速度。
-
在这种情况下,INT 绰绰有余。 Uniqueidentifier 用于“随机访问”下一个 id。 ID 最初是从多个位置创建的,并非所有位置都在数据库中。
-
这里不使用 GUID 的好文章...sql-server-performance.com/2005/guid-performance
-
+1 有帮助,但在我的情况下仍然认为这不是问题,因为表很少被修改,甚至在范围内选择唯一 ID 本身(例如 @X OP 是变量,而不是参数),因此没有传输开销。
标签: sql-server-2008 indexing database-schema