HINWEIS
HINWEIS
Volltextabfragen
Mit dem zunehmenden Einsatz von Datenbanken zur Verwaltung von Texten oder Dokumenten haben
sich auch die Anforderungen an die Server-Software verändert. Informationen werden nicht mehr nur in
einzelnen Tabellenspalten verwaltet (Nachname, Vorname etc.), sondern auch in bis zu 2 GByte großen
Memofeldern. Doch wie sollen die Daten in diesen Felder gefunden werden? Das bisher gebräuchliche
SELECT * FROM xyz WHERE memofeld LIKE '%Suchausdruck%'
ist viel zu langsam und unflexibel.
Die Lösung ist eine Volltextindizierung von beliebigen Tabellenspalten und -inhalten, d.h., in einem sepa-
raten Index wird für jedes eindeutige Wort gespeichert, in welcher Zeile bzw. in welcher Spalte es sich be-
findet. Bei der späteren Suche nach dem Wort genügt der Index, um alle Fundstellen des Wortes zu
ermitteln.
Seit Version 7 des SQL Servers hat auch Microsoft eine derartige Funktion integriert, die in der vor-
liegenden Version 2005 im Performance-Bereich wesentlich verbessert wurde. Allerdings sollten Sie bei
Verwendung der Volltextsuche mit Arbeitsspeicher nicht zu sehr geizen.
Möchten Sie dieses Feature auch mit der Express Edition nutzen, müssen Sie sich die aktualisierte SQL Server
2005 Express Edition with Advanced Services von der Microsoft-Homepage herunterladen.
Für die Administration der Volltextsuchfunktionen verwenden Sie entweder T-SQL-Befehle oder das SQL
Server Management Studio. Die eigentlichen Abfragen werden wie gewohnt mit SQL ausgeführt, dazu
stehen mit CONTAINS und FREETEXT zwei komplexe Befehle bereit. Im Gegensatz zur LIKE-Anweisung
sind die beiden genannten Befehle nicht nur wesentlich schneller, sondern auch leistungsfähiger. Neben der
reinen linguistischen Suche nach Wörtern und Ausdrücken lassen sich auch Abfragebegriffe wichten, d.h.,
es kann eine unscharfe Suche realisiert werden. Zusätzlich sind auch Angaben wie NEAR möglich, d.h. ein
Wort befindet sich »in der Nähe« des anderen Wortes.
Allgemeine Voraussetzungen
Bevor Sie eine Tabelle mit einem Volltextindex versehen, müssen Sie sich einige Gedanken über das Layout
machen.
Die zu indizierende Tabelle sollte über einen möglichst kurzen Primärschlüssel verfügen. Dies kann zum
Beispiel eine Identity-Spalte (Integer, 4 Byte) sein. Je länger der Schlüssel, desto mehr Informationen
müssen in den Volltextindex aufgenommen werden (über den Schlüssel wird die Position eines Wortes
bestimmt). Ein wie auch immer gestalteter Primärindex ist jedoch Voraussetzung für eine Indizierung.
Nehmen Sie nur die Spalten in den Index auf, die Sie unbedingt benötigen, da sowohl die Indexerstellung
als auch Verwaltung sehr ressourcenintensiv ist.
Bedenken Sie, dass nur textbasierte Spalten indiziert werden können (TEXT, VARCHAR, NVARCHAR ...).
Seit der Version 2005 entfällt die sonst erforderliche Installation der Volltextsuchfunktion auf dem SQL Server,
diese wird automatisch mit installiert. Auch den Volltextkatalog müssen Sie nicht gleich anlegen, dies können Sie während der
Definition des Volltextindex erledigen.
649
Praktisches Arbeiten mit dem SQL Server
Kapitel 10: SQL Server
Haben Sie diese Vorbereitungen abgeschlossen, können Sie über das SQL Server Management Studio die
gewünschten Tabellen für die Volltextsuche anmelden:
Abbildung 10.33 Anmelden der Tabellen
für die Volltextsuche
Nach dem Festlegen des Primärschlüssels und der Auswahl der zu indizierenden Spalten brauchen Sie nur
noch einen Volltextkatalog zuzuweisen.
Abbildung 10.34 Volltext-Katalog zuordnen
Erzeugen Sie diesen jetzt (siehe obige Abbildung) oder wählen Sie einen vorhandenen aus. Dazu müssen Sie
neben einem Namen auch den Speicherort (die Daten werden nicht in der Datenbank gespeichert) ange-
650
HINWEIS
BEISPIEL
ben. Weiterhin lassen sich über den Katalog die Zeiten bestimmt, zu denen der Index aktualisiert bzw. neu
aufgebaut werden soll.
Der Hintergrund für diese Zeitplan-Steuerung: Nicht in jedem Fall ist es sinnvoll, mit dem Einfügen,
Löschen oder Ändern von zugrundeliegenden Tabellendaten auch den Index zu aktualisieren (hohe Server-
last). Parametrieren Sie die Volltextindizierung in diesen Fällen. Mit Hilfe eines Zeitplans können Sie nun
bestimmen, zu welchen Zeiten (möglichst nachts bei geringer Serverlast) der Index gänzlich oder nur inkre-
mentell neu aufgebaut werden soll.
Abbildung 10.35 Zeitplan für das Auffüllen des Volltext-Index
Vergessen Sie nicht, dass kurz nach dem Erstellen zwar ein Volltextindex existiert, dieser jedoch in keinem Fall
aktuell ist. Je nach Größe des Datenbestandes dauert es einige Minuten (Stunden?), bis alle Stichworte verarbeitet sind.
Erstellen mit T-SQL
Erzeugen eines Volltextindex mit TSQL
USE TestDB;
CREATE FULLTEXT CATALOG myCatalog AS DEFAULT;
CREATE FULLTEXT INDEX
ON Lexikon(Beschreibung) KEY INDEX PK_Lexikon;
651
Praktisches Arbeiten mit dem SQL Server

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.