MYSQL abfragen zu langsam. Hilfe

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MYSQL abfragen zu langsam. Hilfe

    Ich habe unter einer Testdatenbank meherere Abfragen aufgebaut, die nach einspielen der Richtigen, meiner Meinung nach, nicht so grossen Datenbank, funktionierten mehrere abfragen einfach zu langsam. Auf die Folgende muss man ca 10 bis 20 min warten bis die was ausgibt. Es ist nat�rlich keine L�sung f�r das internet. Habe ich was falsch gemacht? Kann man die schneller machen? Wieleich die reinfolge der verkn�pfungen umdrehen oder sogar andere Tabellen benutzen. Zur zeit benutze ich standart tabellen myislam.

    Tabelleninformationen Menge:
    tabBrangeRus beinhaltet 3000
    tabPLZ beinhaltet50000-60000
    tabBrangeArt beinhaltet 50
    Bundeslnd beinhaltet 16

    SELECT FaName, ind, tabPLZ.plz, ort, vkluchit, art, Bundesland as bn, WasAnbieten
    FROM tabBrangeRus
    INNER JOIN tabPLZ ON tabPLZ.plz = tabBrangeRus.plz
    INNER JOIN tabBrangeArt ON tabBrangeRus.brangenArt = tabBrangeArt.brangenId
    WHERE tabBrangeRus.brangenArt = '5' and Bundesland='NRW' or tabBrangeArt.gehoertZu = '1' and Bundesland='NRW' and vkluchit=1
    ORDER BY ort ASC

    Kann man damit was machen?

    Danke
    Vlad

  • #2
    Hats du mal Inidizes auf die Spalten gesetzt?

    Bei diesen Feldern wäre es angebracht:
    - tabPLZ.plz
    - tabBrangeRus.brangenArt, Bundesland (Index über beide Spalten !)
    - tabBrangeArt.gehoertZu, Bundesland, vkluchit (Index über alle drei)
    - ort

    Index über mehrere Spalten geht natürlich nur, solange die in einer Tabelle sind. Sonst halt einzelne.


    Außerdem könnt die Where-Klausel ein paar Klammern vertragen:

    WHERE (tabBrangeRus.brangenArt = '5' and Bundesland='NRW')
    or (tabBrangeArt.gehoertZu = '1' and Bundesland='NRW' and vkluchit=1)


    Wenn vkluchit zu tabBrangeArt gehört und Bundesland weder zu tabBrangeRus noch tabBrangeArt, dann hilft noch ein bißchen distributieren:
    Code:
    WHERE Bundesland='NRW' and (
      tabBrangeRus.brangenArt = '5'
      or
      (tabBrangeArt.gehoertZu = '1' and vkluchit=1)
    )
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      Ein wichtiges Kapitel für die Optimierung von langsamen SELECT-Abfragen befindet sich auf der MySQL-Homepage:
      http://www.mysql.com/doc/de/Query_Speed.html

      Der EXPLAIN-Befehl ist vor allem bei LEFT JOIN-Abfragen hilfreich, um festzustellen, wo mithilfe einer Indizierung oder einer Umstellung der Abfrage Geschwindigkeit gewonnen werden kann.

      Ja, das Kapitel ist etwas umfangreicher, aber es lohnt sich.
      Happiness is an empty error log

      Kommentar

      Lädt...
      X