所以今天我做了一些优化,创建了一些索引视图等等,我遇到了这个警告。
警告!聚集索引的最大密钥长度为900字节。指数“IX_.”最大长度为8004字节。对于某些大值组合,插入/更新操作将失败。
索引是
CREATE UNIQUE CLUSTERED INDEX IX_.. ON  [aView] ([id], [type])观点是
CREATE VIEW aView
WITH SCHEMABINDING
AS 
SELECT Id, Replace(Replace([aField],'....',''),'....','') AS [Type], COUNT_BIG(*) AS DistinctTotal
FROM .....
INNER JOIN........Id是INT
物理表中的aField是一个VARCHAR(120)
所以索引的最大键长将是120+4字节,不是吗?
我为什么看到这个警告?
有效吗?
发布于 2017-09-28 08:58:29
对于您的特定情况,分析REPLACE调用的所有输入,我们可以看到它们只能保留相同长度或更小的字符串。
但是一般来说,REPLACE理论上可以返回一个varchar(8000),即使它的一个输入只是一个varchar(120)。Server在这里不执行复杂的分析-它看到replace并假定返回类型为varchar(8000)。
因为我们知道在所有替换之后它不会超过120个字符,所以在表达式周围添加一个显式的CONVERT(varchar(120),<existing replaces>)包装器。
https://stackoverflow.com/questions/46464913
复制相似问题