【发布时间】:2012-09-09 05:41:59
【问题描述】:
我有一个带有 nvarchar(max) 数据类型列的表。此列中数据的最大长度为 37000,那么我不能使用 nvarchar(4000)。如何为该列创建索引?我的数据是波斯语的 unicode 文本。
【问题讨论】:
-
索引该长度的列似乎毫无意义....建议您查看全文 Indexinhg
我有一个带有 nvarchar(max) 数据类型列的表。此列中数据的最大长度为 37000,那么我不能使用 nvarchar(4000)。如何为该列创建索引?我的数据是波斯语的 unicode 文本。
【问题讨论】:
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
【讨论】:
最好使用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]
【讨论】: