Firebird Tutorials
In der Open Source Datenbank
Firebird gibt es leider keinen eingebauten Volltextindex. Aus diesem Grund wird hier beschrieben, wie ein
Volltextindex mittels PSQL nachgerüstet werden kann.
Vorteile
- Keine externen Module notwendig - sofort auf allen unterstützten Plattformen lauffähig.
- Indiziert CHAR-, VARCHAR-Felder und Text-BLOB's inklusive UNICODE-Zeichensätze.
- Pro Tabelle können mehrere Textspalten indiziert werden.
- Schnelle Suche im Volltextindex.
- Einfache Implementierung in vorhandene Datenbanken.
- Tabellenübergreifende Suche möglich.
Nachteile
- Langsame Indizierung - 10kB Text brauchen bei 1,6 GHz ca. 5s.
- Relativ großer Speicherverbrauch bei Indizierung von Wortteilen, da jeder indizierte Wortteil einen Datensatz in der Linktabelle erzeugt.
Die hier vorgestellte Variante basiert auf
Firebird 2.1.1.
Auch eine
Soundex Funktion zur Ähnlichkeitssuche wird nicht mitgeliefert. Da der Soundex Algorithmus nicht sehr kompliziert ist, läßt er sich ebenfalls sehr gut
in PSQL implementieren.Vorteile
- Keine externen Module notwendig - sofort auf allen unterstützten Plattformen lauffähig.
- Bei Bedarf können weitere Zeichen neben den Buchstaben verwendet werden.
- Die Gewichtung der einzelnen Zeichen ist frei von 1 bis 9 definierbar.
- Läßt sich für verschiedene Sprachen konfigurieren.
- Verschiedene Sprachen können parallel verwendet werden.
- Einfache Implementierung in vorhandene Datenbanken.
Nachteile
- Der Soundex Algorithmus findet auch Ähnlichkeiten, wo eigentlich keine sind. (Siehe Beispiel im Wikipedia-Artikel.)
Die hier vorgestellte Variante basiert auf
Firebird 2.5 Beta 1.
Eine weitere Möglichkeit der Ähnlichkeitssuche besteht in der Berechnung der
Levenshtein-Distanz. Auch diese Berechnung ist vollständig
in PSQL implementiert und kann mittels eines
Code Generators an eigene Bedürfnisse angepasst werden.
Vorteile
- Keine externen Module notwendig - sofort auf allen unterstützten Plattformen lauffähig.
- Einfache Implementierung in vorhandene Datenbanken.
Nachteile
- Relativ langsame Berechnung bei längeren Worten, da die Anzahl der Berechnungsschritte quadratisch zur Länge der Wörter wächst.
Die hier vorgestellte Variante basiert auf
Firebird 2.5 RC 1.
Das Zählen von Datensätzen mittels COUNT(*) über eine ganze Tabelle kann in Firebird und Interbase, je nach Größe der Tabelle, einige Zeit in Anspruch nehmen. Das läßt sich umgehen, in dem die Datenbank die Einfüge- und Löschoperationen mitzählen läßt.
Vorteile
- Die Anzahl der Datensätze einer Tabelle läßt sich mit einem einfachen Zugriff auf einen Generator (bzw. Sequenz) ermitteln.
- Es lassen sich auch Datensätze mit bestimmten Eigenschaften zählen. Z.B. alle Datensätze, in denen das feld "Active" gesetzt ist.
Nachteile
- Bei jeder Datensatzoperation, die einen Zählvorgang auslöst, werden zusätzliche Trigger aufgerufen, was zusätzliche Zeit in Anspruch nimmt.
Die hier vorgestellte Variante basiert auf
Firebird 2.5 RC 1.