Mailinglisten-Archive |
Norbert Hartl wrote: >Ein Beispielselect sieht ungefaehr so aus (weiss nicht ob das hilft) >SELECT id, col4 FROM table WHERE col1 = 'XXX' and (col2 = '1999-xx-xx') AND col3 < >99 and (col4 >= 500 and col4 <= 1000) and (col5 = 'YYY' OR col5 = 'ZZZ' OR col5 = >'AAA') ORDER BY col4; Optimierungsvorschlag: a)Index auf Col1 bis Col5. (falls ein Primary-Index auf einem dieser Felder möglich wäre, setz´ ihn dort) b)Versuche deine Logik dahingehend zu ändern, das du auf die OR Bedinungen verzichten kannst. (zumindest wenn du nach der Krücke suchst ;-) ) c)das erste Feld der where Bedinung sollte das mit den wenigsten Duplicaten sein. d)alle Klammern bis auf: (col5 = 'YYY' OR col5 = 'ZZZ' OR col5 = >'AAA') werden nicht benötigt. Anscheinend verwendest du keine Joker!? > Was ist denn Joker? z.B: select * from Table where VarCharField like 'H%' würde alle einträge die in VarCharField mit einem 'H' beginnen bringen.(und das sehr schnell. '%H' würde z.B erheblich langsamer laufen.) > > Zu 3.) Kannst du nicht die beiden Char-Felder in ein Feld > bringen und in der > > App wieder trennen? > > Hmmm, die Char-Felder sind Flughaefen und ich suche die passenden Paare > fuer den Abflughafen und den Ankunftshafen. Ich habe im Moment keine > Idee, wie das gehen sollte und was es bringen wuerde. Du hättest einen Index weniger für deine vielen, täglichen Änderungen. (schneller) Ziemlich jede Datenbank ist schneller wenn sie nur ein Feld (statt zwei) prüfen muss. Select * from YourTable where ANAB like 'FrankfurtWien' ist schneller als Select * from YourTable where AN like 'Frankfurt' and AB like 'Wien' Natürlich werden dadurch auch alle anderen SQL-Statements schneller. > > Zu 4.) Wird dein während eines Selects knapp, dann erhöhe ihn. > (Bei ca. 250 > > Ergebnissdatensätzen sollte er aber ausreichen) > > > Das verstehe ich nicht. Es sollte heissen: Zu 4.) Wird dein <Arbeitsspeicher> während eines Selects knapp, dann erhöhe ihn. (z.B mit top unter linux, Taskmanager(Systemleistung) unter NT kannst du das prüfen) Alles in allem sollte (wenn du wirklich nirgends Joker verwendest) ein select mit 250 Ergebnissdatensätzen (lokal ausgeführt) in 10sec (eher weniger) durch sein. (Auch auf schwächeren Systemen als deines) Paul
php::bar PHP Wiki - Listenarchive