2016-06-26 24 views
5

Sto cercando di velocizzare alcune query SQL. La mia query SQL su impaginazione è come questo (3 ° pagina):Limite per FOUND_ROWS()?

SELECT 
    SQL_CALC_FOUND_ROWS book_id, book_title 
FROM 
    books 
LIMIT 40, 60 

E quindi ottenere tutti contano risultato:

SELECT FOUND_ROWS(); 

Ma se il conteggio risultato è enorme (milioni di libri) poi FOUND_ROWS() può preso molto tempo.

Il fatto è che non è necessario contare milioni di righe (libri) e la risposta "10000+" è sufficiente per l'utente abituale.

È possibile qualcosa di simile? Pseudocodice:

SELECT FOUND_ROWS(LIMIT 10000) 
+0

Se si ha accesso al conteggio delle righe tramite la libreria db wrapper per l'altro linguaggio di programmazione che lo utilizza (se ce n'è uno), la libreria restituisce il conteggio delle righe in una proprietà. Sarebbe bello anche uno schema di tabella (indicizzazione). – Drew

+2

Il famigerato [articolo di Percona] (https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/) – Drew

+0

@Drew questo articolo ha quasi 10 anni, è ancora attuale? – krokodilko

risposta

0

non sono sicuro, se è possibile. Ma vorrei suggerire di provare la seguente:

SELECT count(*) into number_of_rows from books. 

quindi utilizzare number_of_rows per l'impaginazione.