Ich versuche, die Ergebnisse einer SQL-Abfrage für die Verwendung auf einer Webseite paginieren. Die Sprache und das Datenbank-Backend sind PHP und SQLite.SQL Paginierung
Der Code Ich verwende funktioniert so etwas wie diese (Seitennummerierung beginnt bei 0)
http://example.com/table?page=0
page = request(page)
per = 10 // results per page
offset = page * per
// take one extra record so we know if a next link is needed
resultset = query(select columns from table where conditions limit offset, per + 1)
if(page > 0) show a previous link
if(count(resultset) > per) show a next link
unset(resultset[per])
display results
Gibt es effizientere Wege Paginierung als dies zu tun?
Ein Problem, das ich mit meiner aktuellen Methode sehen kann, ist, dass ich alle 10 (oder wie viele) Ergebnisse im Speicher speichern muss, bevor ich anfange, sie anzuzeigen. Ich tue dies, weil PDO nicht garantiert, dass der rowcount verfügbar sein wird.
Ist es effizienter, eine COUNT (*) Abfrage zu erstellen, um zu erfahren, wie viele Zeilen vorhanden sind, und die Ergebnisse dann an den Browser zu senden?
Ist dies einer dieser "es hängt von der Größe Ihrer Tabelle ab, und ob die Abfrage count (*) einen vollständigen Tabellenscan im Datenbank-Backend erfordert", "einige Profiling yourself" Art von Fragen?
... solange Sie nicht (WHERE) auf eine Spalte ohne Index filtern und keine Joins verwenden :) – BlaM