【问题标题】:SQL Server column datatype and indexableSQL Server 列数据类型和可索引
【发布时间】:2018-07-20 21:35:41
【问题描述】:

我需要在 SQL Server 表中存储可变字符串长度,长度可以在 0 到 10000 个左右的字符之间变化。

我需要使用类似运算符%abcabc% 过滤文本。

我曾想过使用varcharnvarchar,但我无法在此数据类型上创建索引。

请就选择列数据类型和使列可索引提出设计建议。

谢谢

【问题讨论】:

    标签: sql sql-server tsql sql-server-2012 sql-server-2016


    【解决方案1】:

    SQL Server 将使用like 'abc%' 的索引。但是,如果通配符在前,则不会使用索引。

    如果您正在搜索完整的单词,那么您应该调查contains() and full text search

    【讨论】:

    • 谢谢戈丹。要求不是搜索完整的文本,而是搜索结尾的文本'%abc',有没有endswith之类的函数。
    • @sri 。 . .只需使用通配符。 . . like '%abc'.
    【解决方案2】:

    我曾想过使用 varchar 或 nvarchar,但我无法在此数据类型上创建索引。

    那些适合基于文本的信息的数据类型。

    您无法创建索引的原因与 数据类型 本身无关 - 但在 SQL Server 中,只有在列(或列集) 在索引中有一个最大值。 900 字节(或更少)的理论大小。

    这意味着,VARCHAR(1000)(或VARCHAR(MAX)无法被编入索引。这个大小限制是您的问题 - 而不是数据类型。

    解决方案:实际上只有一个解决方案:在要索引的列中使用更少的字节。或者,按照 Gordon 的建议,查看 SQL Server 的全文索引功能。

    【讨论】:

      猜你喜欢
      • 2015-06-25
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      相关资源
      最近更新 更多