Por 500 eficiencia registros probablemente no es un problema, pero si usted tiene millones de discos, entonces puede ser ventajoso utilizar una cláusula WHERE para seleccionar la siguiente página:
SELECT *
FROM yourtable
WHERE id > 234374
ORDER BY id
LIMIT 20
El "234374" aquí es la identificación del último registro de la página de prevous que viste.
Esto permitirá que se use un índice en la identificación para buscar el primer registro. Si usa LIMIT offset, 20
, puede encontrar que se vuelve más y más lento a medida que avanza hacia el final. Como dije, probablemente no importará si solo tienes 200 registros, pero puede marcar la diferencia con conjuntos de resultados más grandes.
Otra ventaja de este enfoque es que si los datos cambian entre las llamadas, no perderá registros u obtendrá un registro repetido. Esto se debe a que agregar o eliminar una fila significa que el desplazamiento de todas las filas después cambia. En su caso, probablemente no sea importante, supongo que su grupo de anuncios no cambia con demasiada frecuencia y, de todos modos, nadie se daría cuenta si reciben el mismo anuncio dos veces seguidas, pero si está buscando la "mejor manera". luego, esto es otra cosa a tener en cuenta al elegir qué enfoque usar.
Si desea utilizar LIMIT con un desplazamiento (y esto es necesario si un usuario navega directamente a la página 10000 en lugar de paginar páginas una a una), puede leer este artículo sobre late row lookups para mejorar el rendimiento de LIMIT con una gran compensación.
Al utilizar LÍMITE para paginación también se debe especificar un ORDER BY. –
@shylent: No hay nada de malo en citar la documentación, pero estoy de acuerdo en que debería haber mencionado que estaba copiando los documentos y proporcionó un enlace a la fuente original. También me sorprende que la documentación incluya ejemplos de uso de LIMIT sin un ORDER BY ... que parezca una mala práctica para ser alentador. Sin un ORDER BY no hay garantía de que el pedido será el mismo entre llamadas. –
de todos modos, al paginar grandes conjuntos de resultados (y para eso sirve la paginación -desglose los grandes conjuntos de resultados en fragmentos más pequeños, ¿no?), Debe tener en cuenta que si hace un 'límite X, Y', lo que esencialmente ocurre es que X Se recuperan + filas Y y luego se descartan X filas desde el principio y se devuelve lo que queda. Para reiterar: 'límite X, Y' resultados en escaneo de filas X + Y. – shylent