2012-09-09 42 views
9

我有一個包含nvarchar(max)數據類型列的表。此列中數據的最大長度爲37000,那麼我不能使用nvarchar(4000)。我怎樣才能爲這一欄創建索引?我的數據是波斯語的unicode文本。如何在sql中的nvarchar(max)數據類型上創建索引?

+2

索引該長度的柱似乎很大程度上毫無意義....建議你看看全文Indexinhg –

+0

參見http://stackoverflow.com/a/21624526/ 194717 – Tony

回答

11

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,或您可以考慮使用「校驗」的方法。它的目標是建立散列索引,尤其是爲了提高索引長字符列的索引速度(就像你所擁有的那樣)。 您可以閱讀更多並查找示例:http://msdn.microsoft.com/en-us/library/ms189788.aspx

+1

是的,但索引長文本列有什麼意義?除了覆蓋索引(即包含的一部分,即使其可疑優化器會使用它) –

+0

這不會索引列。它只是將其包含在索引數據中。 – gliljas

1

最好是使用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] 
相關問題