Cuando empiezas a trabajar con MySQL, todo parece ir bien… hasta que tu tabla crece.
Un día tienes 20 registros.
Otro día 200.
Y de repente, 10 000 filas cargándose en una sola consulta.
Ahí es cuando muchos proyectos empiezan a fallar silenciosamente.
En este artículo aprenderás qué son LIMIT y OFFSET, cómo usarlos correctamente, por qué protegen tu servidor, y cómo aplicarlos en escenarios reales como blogs, paneles de administración y sistemas de paginación.
📌 Si aún no dominas los comandos básicos, te recomiendo empezar por
👉 “Primeros comandos MySQL que debes memorizar sí o sí”
🔹 ¿Qué es LIMIT en MySQL?
LIMIT indica cuántos registros quieres recibir de una consulta.
SELECT * FROM posts LIMIT 10;
📌 Traducción humana:
“Dame solo 10 filas”.
Sin LIMIT, MySQL devuelve todo, aunque no lo necesites.
🔹 ¿Qué es OFFSET?
OFFSET indica cuántos registros se deben saltar antes de empezar a devolver resultados.
SELECT * FROM posts LIMIT 10 OFFSET 20;
📌 Traducción humana:
“Sáltate los primeros 20 registros y luego dame 10”.
🧠 Ejemplo visual (muy importante)
Supongamos que tienes 50 posts:
ID Título 1 Post A 2 Post B … … 21 Post U 30 Post AD
LIMIT 10 OFFSET 20
👉 Devuelve del 21 al 30
📄 Paginación real
Página 1
SELECT * FROM posts ORDER BY created_at DESC LIMIT 10 OFFSET 0;
Página 2
SELECT * FROM posts ORDER BY created_at DESC LIMIT 10 OFFSET 10;
Página 3
SELECT * FROM posts ORDER BY created_at DESC LIMIT 10 OFFSET 20;
Regla mental fácil 🧩
OFFSET = (página - 1) × registros_por_página
🚀 ¿Por qué LIMIT y OFFSET mejoran el rendimiento?
❌ Consulta peligrosa
SELECT * FROM posts;
- Carga toda la tabla
- Usa mucha memoria
- PHP procesa datos innecesarios
- Lento para el usuario
- ❌ Mala experiencia
✅ Consulta optimizada
SELECT * FROM posts ORDER BY created_at DESC LIMIT 10;
✔️ Menos CPU
✔️ Menos RAM
✔️ Respuesta rápida
✔️ Mejor SEO
⚠️ Error común: usar LIMIT sin ORDER BY
SELECT * FROM posts LIMIT 10;
Esto NO garantiza el orden.
Hoy puede funcionar, mañana no.
✔️ Siempre:
SELECT * FROM posts ORDER BY created_at DESC LIMIT 10 OFFSET 20;
✂️ Sintaxis corta (equivalente)
LIMIT 20, 10;
Es lo mismo que:
LIMIT 10 OFFSET 20;
📌 Recomendación profesional:
Usa LIMIT + OFFSET, es más clara y legible.
🧩 Ejemplo real en PHP (PDO)
$porPagina = 10;
$pagina = max(1, (int)$_GET['page']);
$offset = ($pagina - 1) * $porPagina;
$stmt = $pdo->prepare("
SELECT *
FROM posts
ORDER BY created_at DESC
LIMIT :limit OFFSET :offset
");
$stmt->bindValue(':limit', $porPagina, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
$posts = $stmt->fetchAll();
🔥 LIMIT y OFFSET en proyectos grandes
Cuando una tabla crece mucho (cientos de miles o millones de filas):
- OFFSET alto puede volverse lento
- En esos casos se usan paginación por cursor
👉 Tema avanzado que veremos en otro artículo 😉
🧠 Resumen rápido
LIMITcontrola cuántos resultadosOFFSETcontrola desde dónde empiezan- Son esenciales para:
- blogs
- paneles admin
- dashboards
- SEO
- Siempre usar con
ORDER BY