limite desc mysql pagination

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

  1. En la primera consulta, busque y guarde en caché todos los resultados.

  2. No mostrar todos los resultados Ni siquiera Google te permite ver el resultado número uno.

  3. No muestre el recuento total o los enlaces intermedios a otras páginas. Mostrar solo el "siguiente" enlace.

  4. 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.