【问题标题】:How do you create a non-clustered index for a string column in SQL Server? [duplicate]如何在 SQL Server 中为字符串列创建非聚集索引? [复制]
【发布时间】:2013-03-07 02:39:10
【问题描述】:

我刚刚尝试了这个并得到了有用的信息

表“用户”中的“用户名”列的类型为 不能用作索引中的键列。

用户名是一个 nvarchar(max) 列。

【问题讨论】:

  • nvarchar(max) 不能用作约束/索引。看看这个类似的问题:stackoverflow.com/questions/1184490/…
  • 为什么要在nvarchar(max) 列上建立索引?你为什么使用nvarchar(max) 作为用户名?你认为有人想要在他们的用户名中包含十亿个字符吗?可能nvarchar(50), (64) or (255) 就足够了。 (320) 如果它要代表一个电子邮件地址。我想知道这里是否真的需要 Unicode。
  • LOL 10 亿个字符,涵盖多种语言。
  • 索引条目的最大大小为 900 字节 - 任何大于该大小的内容无法编入索引。因此,您最多可以索引 nvarchar(450)(或 varchar(900)) - 较大的字符串列不适合索引。
  • 我很高兴我为人们提供了一些乐趣。 ;)

标签: sql-server database-indexes


【解决方案1】:

您不能将索引添加到 nvarchar(max) 或 varchar(max) 列,但它可以是索引的一部分。

您可以将其包含在索引中,但该索引需要离线创建/重建。

根据您的列名“用户名”进行猜测,我会将列类型更改为更小的类型,例如 nvarchar(50)。 nvarchar(max) 数据类型最多可以存储 4Gb 的文本,并用于更多的全文存储(在这种情况下,您将设置全文搜索)。

【讨论】:

  • 它还会使索引变得庞大且不可维护。
猜你喜欢
  • 2014-04-27
  • 2012-12-11
  • 2012-10-01
  • 1970-01-01
  • 2014-12-20
  • 2013-05-20
  • 2023-04-11
  • 2014-02-23
相关资源
最近更新 更多