【问题标题】:What is the max varchar length for creating non-clustered index in sql server?在 sql server 中创建非聚集索引的最大 varchar 长度是多少?
【发布时间】:2018-08-09 06:27:30
【问题描述】:

sql server 中不允许在带有varchar(max) 的列上创建non-clustered index

那么,varchar 可以创建的最大长度是多少?

【问题讨论】:

  • 最大索引键大小为 900b。无论如何,索引长字符串是个坏主意。

标签: sql-server maxlength non-clustered-index


【解决方案1】:

键列长度不能超过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

【讨论】:

  • 如果我在索引中包含了描述列,然后我执行了以下查询“从 table1 中选择其中描述='%some text%'”就像创建一个非聚集索引是否在描述栏上?
  • 您是说描述列是否在索引的包含列表中,以及您在评论中的查询如何执行?
  • 是的,我的意思是如果我将描述列放在非聚集索引的包含列表中,当我只对描述列执行搜索查询时有什么好处
  • SQL 不能在使用 like 的查询上使用索引,在上述情况下,因为该列在包含列表中..即使不使用 like sql 可能会扫描整个非聚集索引
  • 我认为你应该使用全文搜索而不是喜欢
【解决方案2】:

非聚集索引(2016 年之前)的最大字节数为 900:

https://docs.microsoft.com/en-us/sql/sql-server/maximum-capacity-specifications-for-sql-server

所以,试试 VARCHAR(900),让我们知道你的进展情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-19
    • 2013-05-20
    • 2012-03-24
    • 2014-02-23
    • 2012-10-01
    • 2018-05-08
    • 2012-12-11
    相关资源
    最近更新 更多