Kacam.net

Увидеть мир

Базы данных: по одному куску за раз

Нарезано не как «оптимизация индексов / транзакции / тюнинг» —— для такой широкой темы в ключе к проверке можно написать только «следи за селективностью, следи за блокировками». Здесь режем узко: порядок колонок в составном индексе, что на самом деле блокирует один UPDATE, что делает OFFSET на этом шаге.

Пока эти заготовки есть только на 简体中文.

Как этим пользоваться

Эта серия обучающая: она ведёт, а не загоняет в угол. Когда вы застряли, она сначала спрашивает, на каком слое (не слышал / знаю, но не знаю почему / знаю почему, но не применяю), и только потом решает, что дать. Объясняет напрямую лишь после двух попыток подвести, а затем просит пересказать своими словами.

По умолчанию рассуждает в терминах MySQL / InnoDB —— половина ловушек здесь это детали реализации, а кластерный индекс, обращение к таблице и gap-блокировки в других СУБД устроены иначе. PostgreSQL и любые другие тоже подойдут: скажите об этом первой фразой, и она будет следовать вашей СУБД, отмечая, где выводы расходятся.

С чего начать

  1. Выберите одну, откройте, скопируйте промпт.
  2. Вставьте в новый пустой чат и первой фразой скажите, какая у вас СУБД и версия (если не сказать, будет MySQL 8).
  3. Дальше ничего не говорите и ждите первого вопроса.

Четыре команды, их можно бросить в любой момент

  • 跳过 Сразу к следующей сцене
  • 换个说法 Объясни это место с другой стороны
  • 直说吧 Дай полный ответ, потом заставь меня пересказать
  • 复盘 Сразу к итоговой карточке

Три ловушки

  • Не читайте ключ в конце заранее —— раздел «частые заблуждения» и есть ответ на каждый вопрос.
  • Готовьтесь к тому, что с вас потребуют цифры. «Немного быстрее», «экономит IO» обрывают на месте: сколько строк? сколько раз? во сколько раз? Вывод без цифры — заученный.
  • Как только начнёт хвалить, напомните про правило «не хвали меня». Вести — не значит нянчить.

Начните с составного индекса: это фундамент серии, и «блокировки лежат на записях индекса», и «почему читается столько строк» опираются на его главную фразу. Если в бою кусается конкурентность — начните с «прочитал, потом записал»; если тормозят запросы — с плана выполнения.

Транзакции и блокировки

隔离级别各挡住了什么
RR 下读到余额 100,然后 UPDATE balance = balance - 10 —— 扣完是多少?
★★★★☆ · около 40 мин
一条 UPDATE 锁了什么
UPDATE ... WHERE 一个没索引的列 —— 这时候「行锁」还是行锁吗?
★★★★☆ · около 35 мин
先查再改,为什么会丢
「包进事务里不就行了」——事务到底挡住了什么?
★★★☆☆ · около 30 мин
Эти промпты с открытым исходным кодом Тексты живут в публичном репозитории kacam-net/hero-prompts. Если какой-то давит недостаточно или в его карты на руках не дописана строка — идите и правьте. Появится ли он на сайте, решает отдельно список на этой стороне.