kurz kann ich nicht
eine ablaufbeschreibung:
tab1
f1 f2 ohne index
1 20060222
2 20060221
tab1
f1 f2 index auf f2
1 20060222 position 2 (immer zahlen)
2 20060221 position 1
select * from tab1 order by f2
im ersten fall verarbeitet die
mysql die abfrage indem sie 20060222 <= 20060221 prueft
im zweiten fall läuft die prüfung auf den index --> sehr viel schneller als 1 insbesondere wenn f2 = langer string
aber:
update tab1 set f2=20060223 where f1=2 ist im ersten fall schneller da es keinen index zum reorganisieren gibt.
ach ja: ist die select abfrage komplex (viele funktionen) kann es passieren, daß die indices nicht verwendet werden: select * from tab1 order by datediff(f2,20060101)/365
noch 'n tipp:
gut: select * from tab1 where (grosse einschraenkung) and (weniger grosse einschraenkung)
schlecht: umgekehrt
gut: insert into temp (select * from riesig where (einfach zu berechnen))
select * from temp where (komplex)
schlecht: select * from riesig where (komplex) and (einfach zu berechnen)
die index-datei ist vereinfacht dargestellt.
o'reilly
mysql hat mir sehr geholfen.
hilfe bei index-entscheidungen: tabellenstruktur und liste mit
sql-statements, groesse der tabellen
und verhaeltnis von select zu insert/update posten