Kacam.net

Bases de datos

翻到第 5000 页

LIMIT 20 OFFSET 100000 —— 它是怎么找到第 100001 行的?

Copia la indicación y elige un modelo. Hará de entrevistador y te irá preguntando escena por escena en vez de darte la respuesta.

En un móvil con la aplicación instalada, el sistema la abre directamente. Dentro de WeChat no se pueden abrir aplicaciones externas: ábrelo primero en el navegador.

El texto copiado termina con la plantilla de corrección que usa el modelo. No la leas tú antes: lo que cuenta es haberlo razonado por tu cuenta.

答案朴素得让人不舒服:一条条数过去。知道这一句之后,「为什么加了索引还是慢」「为什么第一页快最后一页慢」就都不用问了。

但这一份的一半重量在另一边:换成游标分页之后你放弃了什么。跳页没了、总页数没了、收藏的「第 37 页」也没了 —— 说不出这几条的,只是抄了一个方案。收尾时它会把「只说了技术代价」的地方单独标出来。

最后还问一句很少有人问的:到底是谁在翻第 5000 页?

★★★☆☆ · unos 30 min · Se evalúa: OFFSET 的线性代价、复合游标、跳页与总数的取舍、COUNT 的代价

Lo que entrena este

Paginación y volumen Planes de ejecución

¿Ya hiciste este?

Inicia sesión para marcar que ya lo practicaste; la próxima vez verás qué día fue.

Notas de quienes lo hicieron

Todavía no hay ninguna. Cuando lo termines, cuenta qué salió de la conversación: qué escena te dejó sin respuesta, qué conclusión cambiaste después.

Entrar para escribir una nota.

Cómo se usa

Esta serie es de aprendizaje: te guía, no te acorrala. Cuando te atascas primero pregunta en qué capa estás atascado (nunca lo oí / lo sé pero no por qué / sé por qué pero no lo aplico) y luego decide qué darte. Solo explica tras guiarte dos veces, y después te pide que lo repitas con tus palabras.

Por defecto razona en MySQL / InnoDB —— la mitad de las trampas aquí son detalles de implementación, y el índice agrupado, la vuelta a la tabla y los bloqueos de hueco funcionan distinto en otros motores. PostgreSQL u otro también vale: dilo en tu primera frase y seguirá tu motor, señalando dónde cambian las conclusiones.

Cómo empezar

  1. Elige uno, ábrelo y copia el prompt.
  2. Pégalo en una conversación nueva y vacía, y di primero qué motor y versión usas (si no lo dices, asume MySQL 8).
  3. Después no digas nada más y espera su primera pregunta.

Cuatro comandos que puedes soltar en cualquier momento

  • 跳过 Pasar ya al siguiente acto
  • 换个说法 Explicar esto desde otro ángulo
  • 直说吧 Dar la respuesta completa y luego hacérmela repetir
  • 复盘 Saltar directo a la ficha de cierre

Tres trampas

  • No leas la plantilla del final antes de empezar —— la sección «errores de razonamiento frecuentes» es la respuesta a cada pregunta.
  • Prepárate para que te pida números. «Un poco más rápido», «ahorra IO» se corta en el acto: ¿cuántas filas? ¿cuántas veces? ¿cuántas veces más rápido? Una conclusión sin número es memorizada.
  • En cuanto empiece a halagarte, recuérdale la regla «no me halagues». Guiar no es consentir.

Empieza por el índice compuesto: es el cimiento de la serie, «los bloqueos van sobre registros de índice» y «por qué lee tantas filas» se apoyan los dos en su frase clave. Si la concurrencia te está mordiendo en producción, empieza por «leer y luego escribir»; si las consultas van lentas, por el plan de ejecución.