MySQL LÍMITE Y COMPENSACIÓN con ejemplos

⚡ Resumen inteligente

El MySQL La palabra clave LIMIT restringe la cantidad de filas que devuelve una consulta, y el valor OFFSET determina desde qué fila comienza el resultado. Juntas, mantienen los conjuntos de resultados pequeños, hacen que las páginas se carguen rápidamente y permiten la paginación registro por registro.

  • 🔢 Comportamiento básico: LIMIT N devuelve como máximo N filas. Una tabla con menos filas que N las devuelve todas, sin error.
  • 0️⃣ Caso cero: LIMIT 0 no devuelve ninguna fila, lo que lo convierte en una forma económica de inspeccionar los metadatos de las columnas.
  • 📍 Sintaxis de desplazamiento: LIMIT 1, 2 omite una fila y devuelve dos, por lo que primero se escribe el desplazamiento y después el número de filas.
  • 📄 Fórmula de paginación: OFFSET es igual al tamaño de la página multiplicado por el número de página menos uno, lo que convierte un conjunto de resultados en páginas numeradas.
  • ↕️ Dependencia del orden: Sin ORDENAR POR, MySQL Puede devolver filas diferentes en cada ejecución, por lo que LIMIT es determinista solo con una ordenación explícita.
  • ⚙️ Declaración de apoyo: LIMIT también limita las filas afectadas por UPDATE y DELETE, protegiendo así una tabla grande de una escritura sin límite.
  • ???? Advertencia sobre el rendimiento: Un gran desplazamiento hace MySQL Lee y descarta cada fila omitida, de modo que las páginas más profundas avancen más lentamente.

MySQL LÍMITE y DESPLAZAMIENTO

¿Qué es la palabra clave LIMIT en MySQL?

El LIMITE LAS La palabra clave restringe el número de filas que se devuelven en el resultado de una consulta. Se puede usar con las sentencias SELECT, UPDATE y DELETE, por lo que limita tanto las filas que lee una consulta como las que se modifican al escribir en ella.

La sintaxis para la palabra clave LIMIT es la siguiente.

SELECT {fieldname(s) | *} FROM tableName(s) [WHERE condition] LIMIT N;

AQUÍ

  • “SELECCIONAR {nombre(s) de campo | *} DESDE nombre(s) de tabla” son los Instrucción SELECT que contiene los campos que nos gustaría devolver en nuestra consulta.
  • “[DÓNDE condición]” es opcional, pero cuando se proporciona especifica un filtro en el conjunto de resultados. Dónde cláusula se aplica antes de LIMIT, por lo que el filtrado se realiza primero y el límite se aplica a lo que sobrevive.
  • “LÍMITE N” es la palabra clave, y N es cualquier número que comience desde 0. Si se establece 0 como límite, no se devuelve ningún registro. Si se establece un número como 5, se devuelven cinco registros. Si la tabla contiene menos registros que N, se devuelven todos y no se genera ningún error.

La sintaxis es breve, pero vale la pena explicar el motivo de su existencia antes de presentar los ejemplos.

¿Por qué deberíamos usar la palabra clave LIMIT?

Supongamos que estamos desarrollandoping La aplicación se ejecuta sobre myflixdb. Los diseñadores del sistema nos han pedido que limitemos la cantidad de registros mostrados por página a 20, para evitar tiempos de carga lentos. ¿Cómo implementamos un sistema que cumpla con este requisito?

La palabra clave LIMIT maneja precisamente esta situación. En lugar de cargar todas las filas de miembros en la aplicación y descartar la mayoría, la consulta devuelve 20 registros por página y la base de datos se encarga del resto. Esto conlleva tres ventajas.

  • Respuesta más rápida: Se leen menos datos del disco y se transmiten menos datos a través de la red.
  • Menor consumo de memoria: La aplicación contiene una página de filas, no la tabla completa.
  • Safer escribe: un LÍMITE en una ACTUALIZACIÓN o una BORRAR Esta instrucción limita la cantidad de filas que puede afectar un error.

MySQL Ejemplos de consultas LIMIT

Los siguientes ejemplos se ejecutan sobre la tabla de miembros de la base de datos myflixdb. El primero devuelve dos filas y nada más.

SELECT * FROM members LIMIT 2;
número de socio nombres completos género fecha de nacimiento fecha_de_registro dirección física direccion postal número de contacto o enviar un email. Número de Tarjeta de Crédito
1 Janet jones Mujer 21-07-1980 NULL Primera Calle Parcela No 4 Bolsa privada 0759 253 542 janetjones@yagoo.cm NULL
2 Janet Smith Jones Mujer 23-06-1980 NULL Melrose 123 NULL NULL jj@fstreet.com NULL

Como muestra el resultado anterior, solo se han devuelto dos miembros.

Obtener una lista de diez (10) miembros de la base de datos

Supongamos que queremos una lista de los primeros 10 miembros registrados en la base de datos de Myflix. El siguiente script los solicita.

SELECT * FROM members LIMIT 10;

Al ejecutar el script se obtiene el resultado que se muestra a continuación.

número de socio nombres completos género fecha de nacimiento fecha_de_registro dirección física direccion postal número de contacto o enviar un email. Número de Tarjeta de Crédito
1 Janet jones Mujer 21-07-1980 NULL Primera Calle Parcela No 4 Bolsa privada 0759 253 542 janetjones@yagoo.cm NULL
2 Janet Smith Jones Mujer 23-06-1980 NULL Melrose 123 NULL NULL jj@fstreet.com NULL
3 Roberto Phil Hombre 12-07-1989 NULL Calle 3 34 NULL 12345 rm@tstreet.com NULL
4 gloria williams Mujer 14-02-1984 NULL Calle 2 23 NULL NULL NULL NULL
5 leonard hofstadter Hombre NULL NULL Woodcrest NULL 845738767 NULL NULL
6 Sheldon Cooper Hombre NULL NULL Woodcrest NULL 976736763 NULL NULL
7 Rajesh Koothrappali Hombre NULL NULL Woodcrest NULL 938867763 NULL NULL
8 Leslie Winkel Hombre 14-02-1984 NULL Woodcrest NULL 987636553 NULL NULL
9 Howard Wolowitz Hombre 24-08-1981 NULL Parque del Sur PO Box 4563 987786553 lwolowitz[arroba]correo.me NULL

Solo se han devuelto 9 miembros, porque N en la cláusula LIMIT es mayor que el número de registros en la tabla. Solicitar explícitamente 9 filas produce el mismo conjunto de resultados.

SELECT * FROM members LIMIT 9;

💡 Consejo: LIMIT selecciona filas en cualquier orden que el servidor produzca. Agregue un ORDEN POR cláusula siempre que importe la identidad de las filas, de lo contrario no se garantiza que "los primeros 10 miembros" signifique las mismas nueve personas dos veces.

Limitar el número de filas es la primera parte de la función. Elegir dónde comienza la ventana es la segunda.

Uso del valor OFFSET en la consulta LIMIT

El OFFSET El valor se usa con mayor frecuencia junto con la palabra clave LIMIT. Especifica desde qué fila comienza el servidor a recuperar los datos, por lo que se omiten las filas anteriores a ese punto.

Supongamos que queremos un número limitado de miembros a partir del centro de la tabla. El siguiente script comienza en la segunda fila y limita el resultado a dos registros.

SELECT * FROM `members` LIMIT 1, 2;

Ejecutándolo en MySQL Banco de trabajo La consulta a myflixdb arroja el siguiente resultado.

número de socio nombres completos género fecha de nacimiento fecha_de_registro dirección física direccion postal número de contacto o enviar un email. Número de Tarjeta de Crédito
2 Janet Smith Jones Mujer 23-06-1980 NULL Melrose 123 NULL NULL jj@fstreet.com NULL
3 Roberto Phil Hombre 12-07-1989 NULL Calle 3 34 NULL 12345 rm@tstreet.com NULL

Tenga en cuenta que aquí DESPLAZAMIENTO = 1, por lo tanto, la fila #2 es la primera fila devuelta, y LÍMITE = 2Por lo tanto, solo se obtienen 2 registros.

En el formato de dos argumentos, primero se escribe el desplazamiento y después el número de filas, lo que facilita invertirlo por accidente. MySQL También acepta una forma explícita que elimina la ambigüedad, y es la que se debe preferir en el código nuevo.

SELECT * FROM `members` LIMIT 2 OFFSET 1;

Ambas instrucciones devuelven las mismas dos filas. Una vez comprendido el desplazamiento, el patrón de paginación en el que se basa cada pantalla de listado se deduce directamente.

Cómo paginar los resultados de una consulta con LIMIT y OFFSET

La paginación divide un conjunto de resultados extenso en páginas numeradas, y la función LIMIT, junto con OFFSET, es el mecanismo que lo hace. Dos valores determinan cada solicitud de página: el tamaño de la página, que indica cuántos registros aparecen en una pantalla, y el número de página solicitado por el usuario.

El desplazamiento se obtiene a partir de ellos mediante una única fórmula.

-- OFFSET = page_size * (page_number - 1)
SELECT membership_number, full_names
FROM members
ORDER BY membership_number ASC
LIMIT 20 OFFSET 0;   -- page 1

La página 2 mantiene el mismo límite y desplaza el margen hacia adelante el tamaño de una página.

SELECT membership_number, full_names
FROM members
ORDER BY membership_number ASC
LIMIT 20 OFFSET 20;  -- page 2

Tres reglas mantienen un listado paginado correcto y rápido.

  1. Ordenar siempre: Una consulta paginada sin ORDER BY puede mostrar el mismo registro en dos páginas diferentes y ocultar otro por completo, porque el servidor tiene la libertad de cambiar el orden de las filas entre llamadas.
  2. Ordenar por una columna única: Los empates en la columna de ordenación dejan indefinido el orden de las filas empatadas. Ordenar por la clave primaria, o añadirla como criterio de desempate, soluciona el problema.
  3. Mira las páginas profundas: DESPLAZAMIENTO 100000 fuerzas MySQL leer cien mil filas y descartarlas antes de devolver las siguientes veinte. El tiempo de respuesta aumenta con el número de página.

Para una paginación muy profunda, la paginación por conjuntos de claves evita por completo el desplazamiento. En lugar de contar las filas que se deben omitir, la consulta recuerda la última clave de la página anterior y solicita las filas posteriores.

SELECT membership_number, full_names
FROM members
WHERE membership_number > 20      -- last id from the previous page
ORDER BY membership_number ASC
LIMIT 20;

Este formato se mantiene rápido a cualquier profundidad, porque el índice salta directamente a la clave inicial en lugar de recorrer las filas que tiene delante. La desventaja es que las páginas deben recorrerse en secuencia, por lo que saltaping Ya no es posible acceder directamente a la página 500.

LÍMITE en MySQL vs TOP y FETCH FIRST

LIMIT no forma parte de todos los dialectos SQL, lo cual es importante en cuanto una consulta tiene que moverse entre motores de bases de datos. MySQL, PostgreSQL, y SQLite comparte la palabra clave LIMIT. SQL Server utiliza TOP y Oracle Utiliza la cláusula estándar FETCH FIRST. La siguiente tabla compara las tres.

Cláusula Motor Ejemplo Salta filas
LÍMITE … DESPLAZAMIENTO MySQL, PostgreSQL, SQLite SELECCIONAR * DE miembros LIMITADO 20 DESPLAZAMIENTO 40; Sí, con OFFSET
ARRIBA SQL Server SELECCIONAR LOS 20 MEJORES * DE LOS MIEMBROS; No, se requiere OFFSET … FETCH
BUSCAR PRIMERO Oracle, Db2, SQL estándar SELECCIONAR * DE miembros OBTENER SOLO LAS PRIMERAS 20 FILAS; Sí, con OFFSET … FILAS

El comportamiento es el mismo en ambos casos: se limita el número de filas y, opcionalmente, se omiten algunas filas. Solo cambia la redacción. Por lo tanto, una consulta que deba ejecutarse en más de un motor debería aislar la cláusula de limitación de filas en lugar de dispersarla por todo el código.

Preguntas Frecuentes

Sí. Ambos aceptan un recuento de filas simple, como por ejemplo: BORRAR FROM members LIMIT 10. El formato de desplazamiento de dos argumentos no está permitido allí, por lo que solo se puede limitar el número de filas afectadas.

El desplazamiento se cuenta desde cero, por lo que DESPLAZAMIENTO 0 comienza en la primera fila y DESPLAZAMIENTO 1 comienza en la segunda. El número de filas es una cantidad simple y se lee como un número normal.

Ejecute una consulta SELECT COUNT(*) independiente con la misma cláusula WHERE pero sin LIMIT. El conteo le indica a la aplicación cuántas páginas existen, mientras que la consulta limitada devuelve las filas de la página actual.

A menudo, sí. Asistentes de IA dentro de clientes como MySQL Banco de trabajo Reescribe una consulta OFFSET en una cláusula WHERE sobre la última clave vista. Confirma que la columna de ordenación sea única y esté indexada antes de confiar en la reescritura.

Porque la instrucción generada normalmente omite ORDER BY. Sin una ordenación explícita, MySQL Puede devolver las filas en cualquier orden, por lo que el mismo LIMIT puede producir una muestra diferente en cada ejecución. Añada la ordenación manualmente.

Resumir este post con: