Index bei Like Abfrage mit Platzhalter

03/02/2010 - 15:06 von smauch24 | Report spam
Hallo,

ich habe eine Tabelle die aus 25 Spalten besteht. Alle Spalten sind vom Typ
nvarchar. Die Tabelle beinhaltet ca. 1,5 Millionen Datensàtze.
Suchanfragen werden über 5 Spalten mit LIKE und Platzhalter gemacht.
(Das ist eine Anforderung die ich nicht àndern kann :-( )

###################################################
SELECT *

FROM tabelle

WHERE Spalte1 LIKE 'Suchbegriff%'
AND Spalte2 LIKE 'Suchbegriff%'
AND Spalte3 LIKE 'Suchbegriff%'
AND Spalte4 LIKE 'Suchbegriff%'
AND Spalte4 'Suchbegriff%'
##################################################

Gibt es hier eine Möglichkeit einen oder mehrere Indizes zu bilden um die
Abfrage zu beschleunigen?


Danke und Gruß,
Andre
 

Lesen sie die antworten

#1 Elmar Boye
03/02/2010 - 15:40 | Warnen spam
Hallo Andre,

smauch24 schrieb:
ich habe eine Tabelle die aus 25 Spalten besteht. Alle Spalten sind vom Typ
nvarchar. Die Tabelle beinhaltet ca. 1,5 Millionen Datensàtze.
Suchanfragen werden über 5 Spalten mit LIKE und Platzhalter gemacht.
(Das ist eine Anforderung die ich nicht àndern kann :-( )
SELECT *

FROM tabelle

WHERE Spalte1 LIKE 'Suchbegriff%'
AND Spalte2 LIKE 'Suchbegriff%'
AND Spalte3 LIKE 'Suchbegriff%'
AND Spalte4 LIKE 'Suchbegriff%'
AND Spalte4 'Suchbegriff%'

Gibt es hier eine Möglichkeit einen oder mehrere Indizes zu bilden um die
Abfrage zu beschleunigen?



Eine LIKE Klausel die nur am Ende ein Ersatzzeichen enthàlt,
ersetzt der SQL Server intern durch ein
Spalte >= Suchbegriff AND Spalte < Suchbegriff + größtes mögliches Zeichen

Der SQL Server kann sowohl einen zusammengesetzten Index verwenden
wie auch Index für einen Teil der Suchkriterien.
Wobei die Nützlichkeit von der Selektivitàt und der effektiven
Breite der Spalten 1 - 4 abhàngt.
Für die beste Leistung sollte die Spalte mit der höchsten
Selektivitàt vorne stehen - was Du ansatzweise über
COUNT(DISTINCT Spalte) ermitteln kannst.

Gibt es vergleichbare Abfragen die nur einige der Spalten verwenden,
solltest Du abwàgen welche Indizes den meisten Nutzen bringen.
Denn bei Aktualisierungen muß jeder Index mitgepflegt werden.

Unter http://msdn.microsoft.com/de-de/lib...90804.aspx
"Entwerfen von Indizes" findest Du einiges mehr zum Thema

Gruß Elmar

Ähnliche fragen