| | | | |
| |||||||
| Datenbanken SQL und Co |
|
| | LinkBack | Themen-Optionen | Thema bewerten |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Erfahrener Benutzer Registriert seit: 14.06.2009
Beiträge: 1.723
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Datenbanken durchsuchen die Einträge in der Regel nicht linear, sondern über eine Indexstruktur in Form eines Baums. Um einen Eindruck zu vermitteln, wie effizient das sein kann: Hinweis: Das ist nur ein Gedankenspiel. Für realistischere Erklärungen (z. B. hinsichtlich der Vorsortierung) siehe Wikipedia (etwa B-Baum). Die Größenordnung sollte aber ungefähr passen. Stell dir vor, du hast eine Datenmenge von 3000 Namen und willst ermitteln, ob der Name "Stefan" darin auftaucht. Bei linearer Suche braucht das im Schnitt -- vereinfacht gesagt -- 1500 Vergleiche. Sortierst du die Einträge jedoch vor der Suche alphabetisch und erzeugst dir einen kleinen Hilfsindex, in dem gespeichert ist, bei welcher Eintragsnummer der Bereich jedes Buchstaben beginnt (zum Beispiel "S ab Eintrag 2741"), kannst du folgendes machen: - Durchsuche den Hilfsindex, bis der Buchstabe erreicht ist, der dem Anfangsbuchstaben von Stefan entspricht (19 Schritte, weil S der 19. Buchstabe ist). - Durchsuche die sortierte Liste ab der dort angegeben Eintragsnummer (2741) weiter nach Stefan. (Sagen wir, es gibt 126 Einträge mit "S", "Stefan" ist davon Nummer 102. Macht also 102 Schritte.) Das ergibt in der Summe nur noch 121 Schritte, was weniger als ein Zehntel der bei linearer Suche angenommenen 1500 Schritte ist. Das Prinzip lässt sich beliebig fortführen. Zu jedem Buchstabenbereich könnte ein weiterer Hilfsindex angelegt werden, der den Eintrag markiert, bei dem der zweite Buchstabe beginnt. Ist Stefan der 3. Name, der mit "St" beginnt, wären es nur noch 19+20+3 = 42 Schritte. Enthält die Liste nun nicht 3000 Namen, sondern meinetwegen 30 Millionen, dann könnte "Stefan" der 173. Name sein, der mit "Stef" beginnt: 19+20+5+6+173 = 223 Schritte (statt 15 Millionen). Ungefähr so schnell sind Datenbanken bei der Suche in indizierten Feldern. (Und aus diesem Grund sollte in jedem WHERE-Teil einer häufig ausgeführten Query eine indizierte Spalte enthalten sein.) Geändert von mermshaus (20.09.2009 um 14:20 Uhr). |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|