mysql - desc - Paginating muy grandes conjuntos de datos
mysql offset (2)
Tengo un conjunto de datos en MySQL donde usar el límite ya es una consulta costosa, y encontrar el número de resultados también es costoso. Por lo tanto, me gustaría evitar hacer otra consulta para encontrar la cantidad de resultados. No puedo usar MYSQL_CALC_FOUND_ROWS porque el límite está dentro de una subconsulta:
SELECT * FROM items,
(
SELECT
item_id
FROM
(etc)
WHERE
some.field=<parameter>
AND (etc)
GROUP BY (something)
ORDER BY (something_else) DESC
LIMIT 15
) subset
WHERE item.id=subset.item_id
Pude unir elementos y eliminar la subconsulta, y luego poder usar MYSQL_CALC_FOUND_ROWS, sin embargo, esto es muy, muy, lento. Probé todas las optimizaciones de índice y supongamos que está fuera de discusión.
Esto ahora se convierte más en una cuestión de diseño ... ¿cómo le permito al usuario navegar a través de estos datos cuando no conozco la última página ? Solo sé si han ido demasiado lejos (por ejemplo, la consulta no arroja resultados).
Aquí hay un resumen de un artículo del gurú de MySQL Baron Schwartz:
http://www.mysqlperformanceblog.com/2008/09/24/four-ways-to-optimize-paginated-displays/
Cuatro formas de optimizar las pantallas paginados
En la primera consulta, busque y guarde en caché todos los resultados.
No mostrar todos los resultados Ni siquiera Google te permite ver el resultado número uno.
No muestre el recuento total o los enlaces intermedios a otras páginas. Mostrar solo el "siguiente" enlace.
Estime cuántos resultados hay. Nuevamente, Google hace esto y nadie se queja.
Para reforzar eso, el concepto de "cuántos" es extremadamente transitorio de todos modos; para cuando la respuesta llega al usuario, fácilmente podría estar equivocado.