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?
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?
Kommentar