将索引添加到大表

Mat*_*n L 0 sql indexing sql-server-2008-r2

我在SQL Server 2008 R2中有一个大表(大约40个记录),它有很高的流量(不断增长,选择和编辑......)

到目前为止,我通过其id(简单身份密钥)访问此表上的行,我有一个列让我们调用它GUID,这对于大多数行是唯一的,但是某些行具有该列的相同值.

GUID列是,nvarchar(max)并且该表包含大约10个键和约束,仅在简单身份键列上进行索引.

我想在此列上设置索引,而不会导致任何崩溃或使表不可用.

我怎么能这样做?

请记住,这是一个拥有高流量的大桌子,它必须保持在线和可用

谢谢

Seb*_*ine 5

嗯,这个问题的答案很简单(但你可能不会喜欢):你做不到.

SQL Server要求索引键小于800字节.它还要求密钥始终"存储在行中".由于NVARCHAR(MAX)列可以显着增大到800字节(最多2GB),并且通常也存储在标准行数据页之外,因此SQL Server不允许索引键包含NVARCHAR(MAX)列.

你有一个选择是使这个GUID列成为一个实际的UNIQUEIDENTIFIER数据类型(或至少是一个CHAR(32).索引GUID仍然不推荐,因为它们会造成高度碎片,但至少可以这样做.但是,这不是一个快速而不简单的事情如果您需要在此更改期间保持在线状态,我强烈建议您获得外界帮助.