phpbar.de logo

Mailinglisten-Archive

[php] Anfragen machen 100% --> nach(trag)frage

[php] Anfragen machen 100% --> nach(trag)frage

Gloss Mathias php_(at)_phpcenter.de
Tue, 26 Feb 2002 15:33:37 +0100


Aloha,

> Von: 	Stephan Schumann[SMTP:sts_(at)_kkcomputer.de]
>
> Hat vielleicht jemand nen link wo ich weitere Infos finde was z.B. die
> Indexes genau machen und was sie mir bringen?
>
der Klassiker fehlt noch:

SQL in 21 Tagen online:

http://www.mut.de/leseecke/leseecke.asp  Kapitel 10

Ist eigentlich ziemlich ausführlich beschrieben. Die Zusammenfassung:

Indexe werden für eine oder mehrer Spalten erstellt.

Wenn du z.B. eine Tabelle personen hast mit

id	Laufende Nummer
vorn	Vorname
nachn	Nachname
ort	Ort

Und einen index a auf vorn, einen index b auf ort, nachn   erstellst, dann:

- Suche nach einer bestimmten ID dauert lange weil kein Index vorhanden.
- Suche nach einem Vorname mit where vorn='Hans' geht fix, weil Index a
benutzt wird.
- Suche nach einem Vorname mit like vorn='Han%' geht fix, weil Index a
benutzt wird.
- Suche nach einem Vorname mit like vorn='%an%' geht langsam, weil KEIN
Index benutzt wird.
  (Das ist das Beispiel bei dir, wenn du die Artikeltexte nach Strings
durchsuchen willst!

Das letzte Problem lässt sich lösen, wenn die Datenbank Volltextindexe
unterstützt oder
du dir einen Volltextindexer dafür baust.

- Suche nach einem Ort mit like ort='Ham%' geht fix, weil Index b benutzt
wird. (ebenso auch
  where ort = 'Hamburg'; ort like ='%amburg%' geht langsam)
- Suche nach Ort UND Nachname geht auch schnell, weil Index b benutzt wird
(where ort=
  'Hamburg' AND nachn = 'Müller')

Die Indexe werden auch beim Sortieren benutzt, z.B. bei where ort='Hamburg'
order by nachn
(Index b).

Also alles in Allem eine praktische Sache, nur dir hilfts nicht weiter ;)

Zu beachten ist noch, daß bei JEDER DML-Operation (Insert / Update / Delete)
auch der Index
geändert werden muß, was zusätzlich Zeit kostet. Wenn du z.B. die
Personentabelle jede
nacht neu aus einer Textdatei lädst, ist es schneller, vorher den Index zu
löschen und nach
dem laden neu zu erzeugen...


Grüße, Mathias


php::bar PHP Wiki   -   Listenarchive