2012-09-09 18 views
9

Mam tabelę z nvarchar (max) typem danych kolumna. Maksymalna długość danych w tej kolumnie to 37000, wtedy nie mogę użyć nvarchar (4000). Jak mogę utworzyć indeks dla tej kolumny? Moje dane to tekst w Unicode w języku perskim.Jak utworzyć indeks na nvarchar (max) typ danych w sql?

+2

indeksowania kolumny tej długości wydaje się w dużej mierze bezcelowe .... Proponuję spojrzeć na Full Text Indexinhg –

+0

Zobacz także http://stackoverflow.com/a/21624526/ 194717 – Tony

Odpowiedz

11

1- można użyć go w „include”

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- lub może rozważyć użycie „CHECKSUM” metody. Jest przeznaczony do indeksowania hash buidling, szczególnie w celu zwiększenia szybkości indeksowania indeksowania kolumn długich znaków (jak masz). Możesz przeczytać więcej i znaleźć przykłady: http://msdn.microsoft.com/en-us/library/ms189788.aspx

+1

tak, ale jaki jest sens indeksowania długiej kolumny tekstowej? Oprócz indeksu obejmującego (tj. Części obejmującej, a nawet wtedy użyłby jej wątpliwy optymalizator). –

+0

To nie indeksuje kolumny. Po prostu włącza go do danych indeksowych. – gliljas

1

Najlepsze jest używanie DROP_EXISTING = ON, które wykonuje przebudowę przy użyciu istniejącego indeksu.

Oto przykład

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] 
Powiązane problemy