Kacam.net

Ver o mundo

Bancos de dados: um pedaço por vez

Não fatiado como «otimização de índices / transações / tuning» —— para um tema tão largo o gabarito só diria «cuidado com a seletividade, cuidado com os bloqueios». Aqui o corte é estreito: a ordem das colunas de um índice composto, o que um UPDATE realmente trava, o que o OFFSET faz naquele passo.

Por enquanto estas instruções existem só em 简体中文.

Como usar

Esta série é de aprendizado: ela conduz, não encurrala. Quando você trava, ela primeiro pergunta em que camada você travou (nunca ouvi falar / sei mas não sei por quê / sei por quê mas não consigo usar) e só então decide o que dar. Só explica depois de conduzir duas vezes, e em seguida pede que você repita com suas palavras.

Por padrão ela raciocina em MySQL / InnoDB —— metade das armadilhas aqui são detalhes de implementação, e índice agrupado, volta à tabela e gap locks funcionam diferente em outros bancos. PostgreSQL ou outro serve: diga isso na primeira frase e ela segue o seu banco, apontando onde as conclusões mudam.

Como começar

  1. Escolha um, abra e copie o prompt.
  2. Cole numa conversa nova e vazia e diga primeiro qual banco e versão você usa (sem isso ela assume MySQL 8).
  3. Depois não diga mais nada e espere a primeira pergunta.

Quatro comandos para usar a qualquer momento

  • 跳过 Já para o próximo ato
  • 换个说法 Explicar este ponto por outro ângulo
  • 直说吧 Dar a resposta completa e depois me fazer repetir
  • 复盘 Ir direto para a ficha final

Três armadilhas

  • Não leia o gabarito do fim antes —— a seção «erros de raciocínio comuns» é a resposta de cada pergunta.
  • Prepare-se para ser cobrado por números. «Um pouco mais rápido», «economiza IO» é cortado na hora: quantas linhas? quantas vezes? quantas vezes mais rápido? Conclusão sem número é decoreba.
  • Assim que começar a elogiar, lembre-o da regra «não me elogie». Conduzir não é acariciar.

Comece pelo índice composto: é o alicerce da série; «os bloqueios ficam nos registros de índice» e «por que ele lê tantas linhas» se apoiam os dois na frase-chave dele. Se a concorrência está mordendo em produção, comece por «ler e depois gravar»; se as consultas estão lentas, pelo plano de execução.

Transações e bloqueios

隔离级别各挡住了什么
RR 下读到余额 100,然后 UPDATE balance = balance - 10 —— 扣完是多少?
★★★★☆ · cerca de 40 min
先查再改,为什么会丢
「包进事务里不就行了」——事务到底挡住了什么?
★★★☆☆ · cerca de 30 min
Estes prompts são de código aberto O texto é mantido no repositório público kacam-net/hero-prompts. Se algum não aperta o suficiente, ou falta uma linha no gabarito dele, vá lá e mude: entrar no ar aqui é outra decisão, tomada pelo catálogo deste lado.