Kacam.net

Bases de données

翻到第 5000 页

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

Copiez la consigne, puis choisissez un modèle. Il joue l'examinateur et vous interroge acte par acte au lieu de vous donner la réponse.

Sur un téléphone où l'application est installée, le système l'ouvre directement. Dans WeChat, les liens n'ouvrent pas les applications externes : ouvrez-le d'abord dans un navigateur.

Le texte copié se termine par le corrigé dont le modèle se sert pour vous évaluer. Ne le lisez pas avant : ce qui compte, c'est de l'avoir déduit vous-même.

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

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

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

★★★☆☆ · environ 30 min · Ce qui est évalué : OFFSET 的线性代价、复合游标、跳页与总数的取舍、COUNT 的代价

Ce que celui-ci travaille

Pagination et volume Plans d'exécution

Déjà fait celui-ci ?

Connectez-vous pour noter que vous l'avez fait : la prochaine fois, vous verrez quel jour c'était.

Notes de ceux qui l'ont fait

Personne n'a encore écrit. Une fois terminé, racontez ce qui est sorti de l'échange : quel acte vous a bloqué, quelle conclusion vous avez changée ensuite.

Se connecter pour écrire une note.

Comment s'en servir

Cette série est du type apprentissage : elle guide, elle ne vous acculera pas. Quand vous bloquez, elle demande d'abord à quel niveau (jamais entendu / je sais mais pas pourquoi / je sais pourquoi mais je n'arrive pas à m'en servir), puis décide quoi donner. Elle n'explique qu'après avoir guidé deux fois, et vous demande ensuite de reformuler avec vos mots.

Par défaut, elle raisonne en MySQL / InnoDB — la moitié des pièges ici sont des détails d'implémentation, et l'index clusterisé, le retour à la table et les verrous d'intervalle ne fonctionnent pas pareil ailleurs. PostgreSQL ou autre convient : dites-le dans votre première phrase et elle suivra votre moteur en signalant là où les conclusions changent.

Comment démarrer

  1. Choisissez-en un, ouvrez-le, copiez l'invite.
  2. Collez-la dans une conversation vide et dites d'abord quel moteur et quelle version vous utilisez (sans précision, ce sera MySQL 8).
  3. Ensuite, ne dites plus rien et attendez sa première question.

Quatre mots-clés à lancer à tout moment

  • 跳过 Passer à l'acte suivant
  • 换个说法 Reprendre ce point sous un autre angle
  • 直说吧 Donner la réponse complète, puis me la faire reformuler
  • 复盘 Passer directement à la fiche de bilan

Trois pièges

  • Ne lisez pas le corrigé de la fin d'abord — la rubrique « erreurs de raisonnement fréquentes » contient la réponse à chaque question.
  • Attendez-vous à devoir chiffrer. « Un peu plus rapide », « ça économise des I/O » est coupé net : combien de lignes ? combien de fois ? combien de fois plus vite ? Une conclusion sans chiffre est une réponse apprise par cœur.
  • Dès qu'elle vous complimente, renvoyez-la à la règle « ne me félicite pas ». Guider n'est pas materner.

Commencez par l'index composite : c'est le socle de la série, « les verrous portent sur les enregistrements d'index » et « pourquoi lit-il autant de lignes » s'appuient tous deux sur sa phrase-clé. Si la concurrence vous mord en production, commencez plutôt par « lire puis modifier » ; si vos requêtes sont lentes, par le plan d'exécution.