【问题标题】:How can I create index on nvarchar(max) datatype in sql?如何在 sql 中为 nvarchar(max) 数据类型创建索引?
【发布时间】:2012-09-09 05:41:59
【问题描述】:

我有一个带有 nvarchar(max) 数据类型列的表。此列中数据的最大长度为 37000,那么我不能使用 nvarchar(4000)。如何为该列创建索引?我的数据是波斯语的 unicode 文本。

【问题讨论】:

标签: sql indexing


【解决方案1】:

1- 你可以在“包含”中使用它

IF OBJECT_ID('tempdb..#example') IS NOT NULL 
BEGIN
    DROP TABLE #example
END

CREATE TABLE #example (id INT PRIMARY KEY IDENTITY(1,1), name VARCHAR(MAX))

CREATE NONCLUSTERED INDEX IDX_NC_temp_example_name ON #example(id) INCLUDE(name)

2-或者您可以考虑使用“CHECKSUM”方法。它用于构建哈希索引,特别是用于提高索引长字符列的索引速度(如您所见)。 您可以阅读更多内容并找到示例:http://msdn.microsoft.com/en-us/library/ms189788.aspx

【讨论】:

  • 是的,但是索引长文本列的意义何在?除了覆盖索引(即包含的一部分,即使这样,它的可疑优化器也会使用它)
  • 那不索引列。它只是将其包含在索引数据中。
  • 阿法林侯赛因你是最棒的。
【解决方案2】:

最好使用DROP_EXISTING = ON,它使用现有索引进行重建。

这是一个例子

CREATE NONCLUSTERED INDEX IDX_NC_temp_example_name ON #example(id) INCLUDE(name)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = ON, SORT_IN_TEMPDB = ON, DROP_EXISTING = ON, ONLINE = ON, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]

【讨论】:

    猜你喜欢
    • 2010-11-09
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2013-02-14
    相关资源
    最近更新 更多