Einzelnen Beitrag anzeigen

Dejan Vu
(Gast)

n/a Beiträge
 
#8

AW: Millionen Datensätze SELECT per Index

  Alt 26. Okt 2014, 09:24
Überlege Dir einfach mal, wie Du die Datensätze schnell finden kannst und wie nicht.
Drei Index jeweils über eines der drei Felder wird zu folgendem Suchalgorithmus führen:
1. Suche den nächsten Eintrag mit der ID (durch den Index das geht sehr schnell).
2. Lade den Record
3. Prüfe, ob START und ENDE passen (einen anderen Index zu verwenden bringt ja nichts, denn der Record ist ja in #2 schon ausgewählt)
4. Wenn START und ENDE passen, kopiere den Record in die Ergebnismenge
5. GOTO 1

Je nach Statistik kann es sein, das die Felder getauscht werden, d.h. in #1 könnte auch ein Record mit passendem START-Wert gesucht werden und anschließend auf ID und ENDE abgefragt.

Bei kombinierten Abfragen wirst Du auch kombinierte Indexe nehmen müssen. Da Du jedoch nicht auf Eindeutigkeit prüfst, kannst Du höchstens 2 Felder kombinieren. Rein theoretisch bringt auch ein Index über drei Werte etwas, aber hier scheint FB nicht schlau genug zu sein. Der Geschwindigkeitsvorteil wäre der, das z.B. sehr schnell ein Record mit passender ID und passendem START-Wert gefunden wird und für die Prüfung, ob ENDE passt, der Record nicht extra geladen werden muss.

Wenn Du deine Überlegung auf die gesamte Datenmenge ausweitest, könnte man 'sofort' alle Kandidaten mit passender ID aus dem Index herauslesen. Weil alle Kandidaten im ID-Index ja direkt nebeneinander liegen.

Auch bei einem kombinierten Index über ID und START (oder ENDE) liegen alle Kandidaten mit passender ID und START direkt nebeneinander und daher geht das sehr schnell. Bei einem kombinierten Index über START und ENDE wirst Du das so nicht finden. Dieser Index bringt nur bei einer Abfrage auf START=<Zeit> etwas.

Bei deiner Abfrage ist es nicht möglich, einen Index zu verwenden, der alle drei Felder kombiniert, weil die Kandidaten ja niemals direkt nebeneinander liegen.
  Mit Zitat antworten Zitat