TurboDB Engine Dokumentation

Sekundäre Indexe

Top  Previous  Next

Zusätzliche Indexe für Tabellen können Abfragen und Filter um Größenordnungen beschleunigen. Betrachten wir eine einfache Abfrage wie:

select * from Customers where State = 'NJ'

oder der vergleichbaren Filterbedingung

State = 'NJ'

Ohne Index muss TurboDB jeden Datensatz der Tabelle prüfen um diejenigen herauszufinden, die der Bedingung entsprechen. Und obwohl TurboDB  wiederholte Lesevorgänge optimiert, kann die Operation für große Tabellen (einige Millionen Datensätze)  einige Minuten dauern.

Wenn dagegen ein Index vorhanden ist, der mit der State-Spalte beginnt, kann die Ergebnismenge augenblicklich geliefert werden, da TurboDB die zutreffenden Datensätze direkt aussortieren kann.

Das gilt auch für Joins, eine zusätzlicher Index kann Wunder bewirken:

select * from Customers, Orders where Orders.CustNo = Customers.No

oder die Entsprechung

select * from Customers join Orders on Orders.CustNo = Customers.No

Auch hier wird ein Index über Orders.CustNo oder Customers.No die Abfrage beträchtlich beschleunigen. Ja nachdem welcher Index existiert wird TurboDB die Abfrage so abarbeiten, dass der Index verwendet werden kann. Da jedoch die Orders-Tabelle wahrscheinlich wesentlich größer ist als die Customer-Tabelle (die durchschnittliche Anzahl an Bestellungen pro Kunde ist hoffentlich größer als eins), wird ein Index über das Feld Orders.CustNo hinsichtlich der Geschwindigkeit mehr bringen als ein Index über Customer.No (Letztere wird meistens sowieso existieren, da die Kundennummer der Primärschlüssel der Kunden-Tabelle sein wird).

Der Nachteil an Indexen ist, dass die Wartung während Änderungen (Editieren, Einfügen, Löschen) wiederum Zeit bedarf. Es muss daher die Geschwindigkeit der gesamten Anwendung im Auge behalten werden. In vielen Anwendungen sind Abfragen wesentlich häufiger als Änderungen, daher zahlen sich Indexe für die entscheidenden Anwendungsfälle meistens aus.