MySQL compensa filas infinitas
Me gustaría construir una consulta que muestre todos los resultados en una tabla, pero que esté compensada en 5 desde el inicio de la tabla. Por lo que puedo decir, MySQL LIMIT
requiere un límite y un desplazamiento. ¿Hay alguna manera de hacer esto?
Del Manual de MySQL sobre LIMIT :
Para recuperar todas las filas desde un determinado desplazamiento hasta el final del conjunto de resultados, puede utilizar un número grande para el segundo parámetro. Esta declaración recupera todas las filas desde la fila 96 hasta la última:
SELECT * FROM tbl LIMIT 95, 18446744073709551615;
Como mencionaste, se requiere LÍMITE, por lo que debes usar el límite más grande posible, que es 18446744073709551615 (máximo de BIGINT sin firmar)
SELECT * FROM somewhere LIMIT 18446744073709551610 OFFSET 5
Como se señaló en otras respuestas, MySQL sugiere usar 18446744073709551615 como número de registros en el límite, pero considere esto: ¿Qué haría si recuperara 18,446,744,073,709,551,615 registros? De hecho, ¿qué harías si tuvieras 1.000.000.000 de registros?
Tal vez desee más de mil millones de registros, pero lo que quiero decir es que existe un límite en el número que desea , y es menos de 18 quintillones. Por motivos de estabilidad, optimización y posiblemente usabilidad, sugeriría poner algún límite significativo a la consulta. Esto también reduciría la confusión para cualquiera que nunca haya visto ese número de aspecto mágico y tendría el beneficio adicional de comunicar al menos cuántos registros está dispuesto a manejar a la vez.
Si realmente necesita obtener los 18 quintillones de registros de su base de datos, tal vez lo que realmente desee es capturarlos en incrementos de 100 millones y repetirlos 184 mil millones de veces.
Otro enfoque sería seleccionar una columna autoincrementada y luego filtrarla usando HAVING.
SET @a := 0;
select @a:=@a + 1 AS counter, table.* FROM table
HAVING counter > 4
Pero probablemente me quedaría con el enfoque de límite alto.