我在SQL Server 2008 R2中有一个大表(大约40个记录),它有很高的流量(不断增长,选择和编辑......)
到目前为止,我通过id
(简单身份密钥)访问此表中的行,我有一个列叫它GUID
,这对于大多数行都是唯一的,但有些行具有该列的相同值。
该GUID
列为nvarchar(max)
,该表包含大约10个键和约束,仅在简单身份键列上进行索引。
我想在此列上设置索引,而不会导致任何崩溃或使表不可用。
我该怎么办?
请注意,这是一张流量大的大型桌子,必须保持在线状态
由于
答案 0 :(得分:5)
嗯,这个问题的答案很简单(但你可能不喜欢):你做不到。
SQL Server要求索引键小于800字节。它还要求密钥始终“存储在行中”。由于NVARCHAR(MAX)
列可以显着增大到800字节(最多2GB),并且通常也存储在标准行数据页之外,因此SQL Server不允许索引键包含{{1} }专栏。
您拥有的一个选项是使此GUID列成为实际的NVARCHAR(MAX)
数据类型(或至少是UNIQUEIDENTIFIER
。仍然不建议使用索引GUID,因为它们会导致高度碎片,但至少是这样的但是,这不是一件快速而且简单的事情,如果您需要在此更改期间保持在线状态,我强烈建议您获得外界帮助。