2009-05-06 12 views
6

Mam tabelę bazy danych z kilkoma kolumnami; większość z nich to kolumny typu VARCHAR(x), a niektóre z nich mają indeks na nich, dzięki czemu mogę szybko wyszukiwać znajdujące się w nich dane.Serwer SQL; indeks w kolumnie TEXT

Jednak jedną z kolumn jest kolumna TEXT, ponieważ zawiera ona bardzo dużą ilość danych (23 kb zwykłego tekstu ascii itp.). Chcę móc wyszukiwać w tej kolumnie (... WHERE col1 LIKE '%search string%'...), ale obecnie trwa to na zawsze, aby wykonać zapytanie. Wiem, że kwerenda jest powolna z powodu tego wyszukiwania kolumn, ponieważ po usunięciu tego kryterium z klauzuli WHERE zapytanie kończy się (co bym rozważył) natychmiast.

Nie mogę dodać indeksu dla tej kolumny, ponieważ ta opcja jest wyszarzona dla tej kolumny w kreator/kreator indeksu w SQL Server Management Studio.

Jakie są moje opcje tutaj, aby przyspieszyć wyszukiwanie zapytań w tej kolumnie?

Dzięki za poświęcony czas ...

Aktualizuj
Ok, więc spojrzał na wyszukiwanie pełnotekstowe i zrobił wszystkie te rzeczy, a teraz chciałbym do uruchamiania kwerend. Jednak przy użyciu "zawiera", akceptuje tylko jedno słowo; co jeśli potrzebuję dokładnej frazy? ... WHERE CONTAINS (col1, 'search phrase') ... zgłasza błąd.

Niestety, jestem nowy w SQL Server

Aktualizacja 2 Niestety, tylko zorientowaliśmy się; użyj wielu klauzul "zawiera" zamiast jednej klauzuli zawierającej wiele słów. Właściwie to wciąż nie dostaje tego, czego chcę (dokładna fraza), tylko upewnia się, że wszystkie słowa w wyrażeniu są obecne.

Odpowiedz

9

Wyszukiwanie pól tekstowych jest zawsze dość powolne. Podaj próbkę i sprawdź, czy to działa lepiej.

+0

+1: Full-Text jest drogą do zrobienia - na pewno! –

+0

Link nie działa. Napraw, jeśli to możliwe! – Andreas

+0

Link jest już naprawiony –

4

Powinieneś patrzeć na używanie Indeksowania Pełnego tekstu w kolumnie.

4

Jeśli twoje pytania są jak LIKE '%string%' (tj. Np. Szukać ciąg wewnątrz polu TEXT), następnie trzeba indeks FULLTEXT.

Jeśli szukasz podciągu w rozpoczynającego pola (LIKE 'string%') i użyj SQL Server 2005 lub wyższy, można konwertować TEXT w VARCHAR(MAX) utwórz komputerowej indeks kolumny i kolumny.

Zobacz artykuł w moim blogu dla wydajności szczegóły:

0

Można zrobić kompleksową logiczną zapytań w FTS; jak

zawiera (yourcol „«Mój pierwszy żądło»lub«mój drugi ciąg»i«mój trzeci ciąg»”)

zależności od CONTAINSTABLE zapytań lub FREETEXTTABLE może dać lepsze wyniki.

Jeśli łączysz się przez Net może warto spojrzeć na A google full text search

+0

Po prostu próbowałem twojej odmiany, i to nie działa; po pierwsze, wymaga użycia "i nie", a drugie dodanie drugiego lub wielu słów nie działa, jeśli użyję albo "albo" w zapytaniu – user85116

+0

Mój błąd potrzebujesz pojedynczego "na końcu składnia to Zawiera (* lub nazwa_profilu, "" twoje dane "i" inne dane "") http://msdn.microsoft.com/en-us/library/ms187787.aspx – u07ch

0

A ponieważ nikt już powiedział to (być może dlatego, że to oczywiste) odpytywanie LIKE '%string%' omija istniejące indeksy - tak to będzie działać powoli. Stąd - dlaczego musisz korzystać z indeksowania pełnotekstowego. (tak powiedział Quassnoi).

Korekta - jestem pewien, że nauczyłem się tego i zawsze w to wierzyłem - ale po pewnym zbadaniu (używając symbolu wieloznacznego na początku) wydaje się być w porządku? Moje stare zapytania do wyrażenia regularnego działają lepiej z polubieniami!