2016-06-26 5 views
5

Ich versuche, einige SQL-Abfragen zu beschleunigen. My SQL-Abfrage auf Paginierung ist wie diese (3. Seite):Limit für FOUND_ROWS()?

SELECT 
    SQL_CALC_FOUND_ROWS book_id, book_title 
FROM 
    books 
LIMIT 40, 60 

und dann alle Ergebniszähler bekommen:

SELECT FOUND_ROWS(); 

Aber wenn das Ergebnis Zahl ist riesig (milions der Bücher), dann FOUND_ROWS() kann nahmen sehr lange Zeit.

Tatsache ist, dass es keine Notwendigkeit gibt, Millionen von Zeilen (Bücher) zu zählen, und die Antwort "10000+" ist genug für den normalen Benutzer.

Ist so etwas möglich? Pseudocode:

SELECT FOUND_ROWS(LIMIT 10000) 
+0

Wenn Sie Zugriff auf die Zeilenanzahl über die db wrapper-Bibliothek für Ihre andere Programmiersprache haben, die diese verwendet (falls vorhanden), dann wird die Zeilenanzahl in dieser Bibliothek in einer Eigenschaft zurückgegeben. Ein Tabellenschema wäre auch schön (Indizierung). – Drew

+2

Der berüchtigte [Percona Artikel] (https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/) – Drew

+0

@Drew dieser Artikel ist fast 10 Jahre alt, Ist es immer noch aktuell? – krokodilko

Antwort

0

Ich bin nicht sicher, ob es möglich ist. Aber ich würde vorschlagen, die folgende versuchen:

SELECT count(*) into number_of_rows from books. 

dann verwenden number_of_rows für Paginierung.