phpbar.de logo

Mailinglisten-Archive

Re: Performance Frage und Indices
Archiv Mailingliste mysql-de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Performance Frage und Indices




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





Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive