Ein Index ist nicht sinnvoll bei Einträgen, die zu oft vorkommen. Beispiel: Es gibt bei den Leistungssätzen ein Statusfeld mit den Werten :
angemeldet, terminiert, durchgeführt, befundet (numerisch verschlüsselt).
Da die meisten Leistungssätze den Status befundet haben wäre die Datenbank bei einer Änderung des Status mit sich selbst beschäftigt: Von durchgeführt => befundet: Platz für den neuen Indexeintrag schaffen (eventuell neue Pages anlegen, Daten ggf. umspeichern, dann den neuen Indexeintrag ablegen). Beim Optimieren unserer
DB (mit Hilfe eines Spezialisten von Oracle) haben wir solche Bottlenecks entfernt.
Das sehe ich anders! Mag durchaus sein, dass beim Einfügen oder Ändern eines Datensatzes die
DB länger mit sich selbst beschäftig ist, aber der Vorteil, das Anfragen schneller beantwortet werden (wegen dem definierten Index), überwiegt
IMHO den Nachteil.
160.000 Blobs nach mehreren Stichworten zu durchsuchen halte ich nicht für sinnvoll. Besser wäre es evtl. den Inhalt der Blobs mittels Schlagworten in eigenen Tabellen zu indizieren und in diesen Tabellen nach den Stichworten zu suchen.
Ich denke die beste Lösung ist nicht das Programm so zu verbiegen, das es beim "Prozess beenden" oder Neustart irgendwelche
DB-Anfragen abbricht oder Verbindungen killt, sondern das
DB-Anfragen schnellstmöglich beantwortet werden (auch wenn sich der User vertippt hat) so das der User überhaupt nicht auf die Idee kommt, das Programm abschießen zu wollen.
Meine Meinung!
Ein Tipp: Es macht bei großen Datenmengen durchaus Sinn, die WHERE-Clausel so zu definieren, das möglichst viele Indices angesprochen und genutzt werden können.
Die WHERE-Clausel also mit Bedingungen füllen, die eigentlich irrelevat sind und das Ergebnis nicht beeinflussen. Somit hat aber die
DB-Engine die Möglichkeit mehrere Indices zu nutzen. Ein Beispiel fällt mir i.M. nicht ein.
Naja, keiner wird dein programm über den Taskmanager beenden, da es nicht eingefroren ist, daher könnte man dann im OnClose Ereignis einfach die
DB Verbindung schließen lassen, falls Sie offen ist.
Korrigiert mich falls ich falsch liege, aber auf den ersten Blick wäre das für mich der einfachste und komfortabelste Weg für dich und den Kunden.
OnClose wird nicht ausgelöst, wenn das Programm im Taskmanager per "Prozess beenden" gekillt wird. Aber das hatten wir schon und das ist genau das Problem.