Mailinglisten-Archive |
Ich kann nur auf Erfahrungen mit Informix zurückgreifen. Prinzipiell sollte die DB versuchen, mit der selektivsten Bedingung anzufangen. Am liebsten nimmt sie dafür einen Index. Wenn aber viele Ergebniszeilen erwartet werden, ist das Lesen über den Index langsamer als ein sequenzieller Scan. Die Frage ist nur, wie berechnet die DB die erwartete Ergebnismenge. Je nach Genauigkeit des Index werden größter und kleinster Wert oder noch mehr oder weniger Stützpunkte gemerkt und auch noch die Häufigkeit der Werte. Wenn die Werte quasi unique sind, ist die Ergebnismenge klein und der Index Scan prima. Gibt es bei 80000 Zeilen aber nur 10 verschiedene Werte, dann ist die Selektivität sehr schlecht und der sequenzielle Scan besser. Um richtig entscheiden zu können, sollten da die Statistik Werte upgedatet werden. Und wenn es dann immernoch nicht hilft, gib nen Index mit hoeherem Fillfaktor (mehr Stützpunkte). -----Original Message----- From: Elmar Haneke <elmar_(at)_haneke.de> To: mysql-de_(at)_lists.4t2.com <mysql-de_(at)_lists.4t2.com> Date: Wednesday, June 23, 1999 10:38 AM Subject: Re: mysql und index Timo Maier schrieb: > > Hi! > > MySQL neuste Version auf Warp4. Table mit ca. 80.000 Eintraegen. > Index auf Feld FART und Feld NUMMER. > Ein "Select * from pos where fart='R' and Nummer=50212" braucht ca. 5 sec (viel > zu langsam) mit Index. > Erstelle ich den Table ohne Index, braucht die Query genauso lange. Irgendwie > wird, so scheint mir, der Index nicht benutzt ("show index from pos" zeigt die > indexe an, wie es sein soll) > Also, die Indexe sind da, aber bringen irgendwie nix. Was mache ich falsch? Wie selektiv sind die Indexe, d.h. wieviele identische Eintragungen gibt es jeweils. Eventuell hilft es, die Statistiken mittels isamchk zu aktualisieren. Für diese Abfrage optimal währe ein Index, der beide Felder beinhaltet. Elmar
php::bar PHP Wiki - Listenarchive