Mysql
 sql >> Database >  >> RDS >> Mysql

Come selezionare l'impaginazione saggia N numero di record dal database MySQL?

primi cento

 SELECT * FROM <table_name> ORDER BY id ASC LIMIT 0, 100

prossimi cento

 SELECT * FROM <table_name> ORDER BY id ASC LIMIT 100, 100

sei molto attento a mettere l'ordine entro

SPIEGAZIONE DELLA DICHIARAZIONE LIMITE: Il LIMIT l'istruzione NON è un WHERE clausola. Non seleziona tramite id né in effetti con alcun criterio, (c'è where clausola lo fa) Invece il limit La clausola assicura semplicemente che ti venga restituita una parte del block di risultati che sono sottoinsiemi di "tutto". Ecco perché è importante menzionare un order by ogni volta, in modo che ogni chiamata successiva ti fornisca il pezzo corretto del blocco dati in ordine, e tu possa 'next', 'next', 'next' attraverso di essi

EG:per la tabella disordinata this_table :

+-------+-------------+
|  id   |   value     |
+-------+-------------+
|  1    |     bob     |
|  12   |     fish    |
|  112  |     pink    |
|  2    |     cat     |
|  8    |     dog     |
|  56   |     blue    |
|  88   |     grey    |
|  87   |     red     |
+-------+-------------+

le selezioni ritornano come di seguito:

SELECT * FROM <this_table> ORDER BY id ASC LIMIT 0,5
+-------+-------------+
|  id   |   value     |
+-------+-------------+
|  1    |     bob     |
|  2    |     cat     |
|  8    |     dog     |
|  12   |     fish    |
|  56   |     blue    |
+-------+-------------+

e

SELECT * FROM <this_table> ORDER BY id ASC LIMIT 5,5
+-------+-------------+
|  id   |   value     |
+-------+-------------+
|  87   |     red     |
|  88   |     grey    |
|  112  |     pink    |
+-------+-------------+

nota la mancanza delle righe 9 e 10, questo è intenzionale e mostra che MySQL funziona come previsto

per inciso dovresti anche cercare di aggiungere un indice su id questo aumenterà MASSIVAMENTE la velocità di queste selezioni

ALTER TABLE <table_name> ADD INDEX `id` (`id`)