MySQL compensa filas infinitas

Resuelto stillinbeta asked hace 16 años • 10 respuestas

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 LIMITrequiere un límite y un desplazamiento. ¿Hay alguna manera de hacer esto?

stillinbeta avatar Nov 01 '08 11:11 stillinbeta
Aceptado

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;
Greg avatar Nov 07 '2008 09:11 Greg

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
Czimi avatar Nov 07 '2008 09:11 Czimi

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.

cesoid avatar Jul 27 '2016 16:07 cesoid

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.

jishi avatar Nov 07 '2008 10:11 jishi