首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >聚集索引键长警告上varchar(120)?

聚集索引键长警告上varchar(120)?
EN

Stack Overflow用户
提问于 2017-09-28 08:50:23
回答 1查看 867关注 0票数 1

所以今天我做了一些优化,创建了一些索引视图等等,我遇到了这个警告。

警告!聚集索引的最大密钥长度为900字节。指数“IX_.”最大长度为8004字节。对于某些大值组合,插入/更新操作将失败。

索引是

代码语言:javascript
运行
复制
CREATE UNIQUE CLUSTERED INDEX IX_.. ON  [aView] ([id], [type])

观点是

代码语言:javascript
运行
复制
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字节,不是吗?

我为什么看到这个警告?

有效吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-28 08:58:29

对于您的特定情况,分析REPLACE调用的所有输入,我们可以看到它们只能保留相同长度或更小的字符串。

但是一般来说,REPLACE理论上可以返回一个varchar(8000),即使它的一个输入只是一个varchar(120)。Server在这里不执行复杂的分析-它看到replace并假定返回类型为varchar(8000)

因为我们知道在所有替换之后它不会超过120个字符,所以在表达式周围添加一个显式的CONVERT(varchar(120),<existing replaces>)包装器。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46464913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档