Kacam.net

Увидеть мир

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

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

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

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

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

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

С чего начать

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

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

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

Три ловушки

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

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

Индексы

联合索引的顺序
(user_id, status) 这个索引,单查 status 为什么用不上?
★★★☆☆ · около 35 мин
它为什么没走索引
索引明明建了,它就是不走 —— 是写废了,还是它算过了?
★★★★☆ · около 35 мин

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

一条 UPDATE 锁了什么
UPDATE ... WHERE 一个没索引的列 —— 这时候「行锁」还是行锁吗?
★★★★☆ · около 35 мин

Запросы и объёмы

读了多少行才吐出这几行
看了执行计划,走索引了 —— 那它扫了多少行、返回几行?
★★★☆☆ · около 35 мин
Эти промпты с открытым исходным кодом Тексты живут в публичном репозитории kacam-net/hero-prompts. Если какой-то давит недостаточно или в его карты на руках не дописана строка — идите и правьте. Появится ли он на сайте, решает отдельно список на этой стороне.