【发布时间】:2018-08-09 06:27:30
【问题描述】:
在sql server 中不允许在带有varchar(max) 的列上创建non-clustered index。
那么,varchar 可以创建的最大长度是多少?
【问题讨论】:
-
最大索引键大小为 900b。无论如何,索引长字符串是个坏主意。
标签: sql-server maxlength non-clustered-index
在sql server 中不允许在带有varchar(max) 的列上创建non-clustered index。
那么,varchar 可以创建的最大长度是多少?
【问题讨论】:
标签: sql-server maxlength non-clustered-index
键列长度不能超过900字节,但是使用sqlserver 2016 cu2,这是1700字节..
您可以将最大列包含在内,尽管它们不应该是关键列的一部分..
create table t1
(
col1 varchar(1700),
id varchar(max)
)
create index nc on t1(col1)
include (id)
补充一点,从 SQLServer 2012 开始,您还可以重建 LOB 类型的索引列,但不支持 text、ntext 和 image..
Remus Rusanu 有一篇很好的博客,介绍了为什么 2012 的早期版本不支持在线索引重建操作..
进一步阅读:
varchar(max) everywhere?
Online Index Operations for indexes containing LOB columns
【讨论】:
like 的查询上使用索引,在上述情况下,因为该列在包含列表中..即使不使用 like sql 可能会扫描整个非聚集索引
非聚集索引(2016 年之前)的最大字节数为 900:
https://docs.microsoft.com/en-us/sql/sql-server/maximum-capacity-specifications-for-sql-server
所以,试试 VARCHAR(900),让我们知道你的进展情况。
【讨论】: