Hi,
Man nehme eine Tabelle mit der Spalte "name". In der Tabelle sind sagen wir mal 100 Einträge. 50 Davon sind Müller, 50 Meier. Die Reihenfolge dabei ist rein zufällig. Also nicht erst 50 Müllen und dann 50 Meier.
Ich zeige die Tabelle nun in meinem Webclient in einer HTML Tabelle an, welche aber nur 25 Einträge anzeigt und dann muss man weiterblättern. Ausserdem kann ich nach Namen filtern.
Nehmen wir nun mal an, ich filtere nach Müller. Dann würde die Tabelle die ersten 25 Müller von insgesamt 50 Müller aus total 100 Einträgen anzeigen.
Um dem User das transparent zu machen steht genau das unter der Tabelle:
"Zeiger 25 von 50 Einträgen gefiltert von gesamt 100 Einträgen"
Um diese Daten zu bekommen muss ich im Moment 3 Queries machen.
1) SELECT COUNT(name) FROM tabelle
2) SELECT COUNT(name) FROM tabelle WHERE name = "Müller"
3) SELECT name FROM tabelle WHERE name = "Müller" LIMIT 1-25
Wie man sieht ist aber 3 immer eine Teilmenge von 2 und das immer eine Teilmenge von 1 (Wenn man mal davon absieht, dass bei 1 + 2 nur die Anzahl abgefragt wird.
Bei deisen einfachen Queries ist das ja noch ok aber ich habe teilweise extrem komplexe Queries mit mehrfachen JOIN, CASES und sogar INNER SELECT und vor allem Sortierungen. Das kratzt dann schon ganz schön an der Performance.
Die Frage ist jetzt ob man es sich irgendwie zu nutze machen kann, dass die 3 Queries Untermengen voneinander sind. Kann man das der DB irgendwie sagen so ala "Der nächste Query kann nur Ergebnisse des vorherigen haben"?
Oder gibt es da eventuell noch eine ganz andere Lösung?
Gruß
Claus
Ankündigung
Einklappen
Keine Ankündigung bisher.
Kann man abhängige Queries eigentlich optimieren?
Einklappen
Neue Werbung 2019
Einklappen
X
-
Kann man abhängige Queries eigentlich optimieren?
Stichworte: -
-
Zitat von erc Beitrag anzeigenQuery 2 und 3 lassen sich mit SQL_CALC_FOUND_ROWS und FOUND_ROWS() zusammenfassen.
Danke
Claus
-
Query 2 und 3 lassen sich mit SQL_CALC_FOUND_ROWS und FOUND_ROWS() zusammenfassen.
Einen Kommentar schreiben:
-
Bei grossen InnoDB Tabellen empfiehlt es sich, die gesamte Tabelle nur selten zu zählen. Dafür das Resultat zwischenspeichern.
Auf ResultSets ein Count ausführen sehe ich nicht so ein Problem.
Einen Kommentar schreiben:
-
Wie man sieht ist aber 3 immer eine Teilmenge von 2 und das immer eine Teilmenge von 1 (Wenn man mal davon absieht, dass bei 1 + 2 nur die Anzahl abgefragt wird.
Also ein Beispiel mit einer komplexeren Query wäre schon sinnvoll, denke aber eh, dass man sowas von Fall zu Fall entscheiden muss. Eventuell mal den Queryplan anzeigen lassen ob man irgendwo was findet.
"Der nächste Query kann nur Ergebnisse des vorherigen haben"
Einen Kommentar schreiben:
-
Zitat von Thallius Beitrag anzeigen1) SELECT COUNT(name) FROM tabelle
2) SELECT COUNT(name) FROM tabelle WHERE name = "Müller"
3) SELECT name FROM tabelle WHERE name = "Müller" LIMIT 1-25
Einen Kommentar schreiben:
Einen Kommentar schreiben: