[MySQL 4.0] Performance

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

  • [MySQL 4.0] Performance

    Hallo,

    ich habe eine Tabelle mit 91 Spalten und ca. 40.000 Daten.
    Für diese Tabelle gibt es eine sehr umfangreiche Suche mit allen Spaltentypen für die Suchoptionen zur Auswahl.

    Das Sucheregebnis soll später als CVS exportiert werden. Bei einigen 1000 Daten macht das auch keine Probleme. Jedoch bei ca. 30.000 Suchergebnissen ist die Export funktion einfach zu langsam.

    Momentan mach ich es so das die IDs des Suchergebnisse in einer Session gespeichert werden. Auf der Export Seite werden die IDs dann in ein Query umgewandelt. Ergebniss sieht dann so aus:

    SELECT * (statt * 91 Spaltennamen) FROM tabelle WHERE id IN(1,2,4,5 etc.) ORDER BY datum

    Einen Index habe ich über beide Spalten (id und datum) angelegt. Dieser wird auch von MySQL genutzt, allerdings ist das ganze trotzdem noch zu langsam (ca. 30 Seks.).

    Hab deswegen statt die IDs in die Session zu speichern, nun den WHERE Teil aus der Suche in der SESSION gespeichert. Ein Query sieht deswegen jetzt so aus:

    SELECT * FROM tabelle WHERE spalte1 = 'ENUMEINTRAG' AND geb => '1950-01-01' AND geb <= '2000-01-01' (könnten auch mehr Spalten sein) ORDER BY datum

    Ohne ORDER BY datum wird das ganze auch in weniger als 1 Sekunde abgearbeitet. Mit dem ORDER BY dauert es allerdings ca. 30 Sekunden. Index habe ich über drei Spalten angelegt: spalte1_geb_datum. Dieser wird auch von MySQL genutzt (EXPLAIN):

    table
    tabelle

    type
    ref

    possible_keys
    spalte1_geb_datum

    key
    spalte1_geb_datum

    key_len
    1

    ref
    const

    rows
    20322

    Extra
    Using where; Using temporary; Using filesort


    Hat jemand eine Idee wie sich das ganze beschleunigen läßt?
    Grüsse,
    Sebastian


    Profil Flex Freelancer
    Twitter twitter.com/flashhilfe
    Web Flash und Flex Community

  • #2
    Ja, normalisieren, denn 91 Spalten ist bestimmt nicht optimal

    Kommentar


    • #3


      Doch ist es. Gibt ja noch mehrere Tabellen die sich auf diese beziehen. Wenn man 91 Daten manuel eintragen muß, bleibt einem wohl nicht viel übrig als 91 Spalten anzulegen. Das bringt mir nichts das auf mehrere Tabellen auszulegen. Sind eh fast alles nur ENUM Felder. - die Angaben stammen aus einem riesigen "Kontakt" Formular.

      Hab die Anfrage jetzt auf mehrere "Seiten" aufgeteilt. - 10.000 Datensätze pro Seite



      Was würdest du machen wenn du ein Formular mit über 91 Angaben hast?

      Abgesehen davon ist die eigentliche Abfrage in weniger als 0.01 Sekunden ausgeführt. Auch bei über 40.000 Daten. Nur das sortieren der Spalte nach dem Datum dauert so lange. Was macht es da für einen Unterschied wenn die Tabelle nur 10 Spalten hätte?
      Zuletzt geändert von Sebastian W; 05.04.2005, 10:29.
      Grüsse,
      Sebastian


      Profil Flex Freelancer
      Twitter twitter.com/flashhilfe
      Web Flash und Flex Community

      Kommentar

      Lädt...
      X