banco-de-dados
MySQL
MySQL em entrevista cobra especificidades da engine: InnoDB e o índice clustered pela primary key (e por que a escolha da PK afeta o layout físico), o nível de isolamento padrão REPEATABLE READ e como difere do Postgres, replicação, e onde MySQL e PostgreSQL divergem em prática (tipos, DDL transacional, JSON).
Tópicos por senioridade
Desafios práticos
Cenários reais pra resolver em voz alta, como numa entrevista de verdade — não é múltipla escolha.
- Cenário: deadlock intermitente no InnoDB
Sua aplicação recebe 'Deadlock found when trying to get lock' de vez em quando no MySQL. O que causa e como reduzir?
Perguntas mais cobradas
ver todas →- Difícil
Índice clustered do InnoDB e a escolha da primary key
A tabela é a B-tree da PK (linhas ordenadas pela PK; secundários apontam pela PK). UUID v4 aleatório espalha inserções → fragmentação e page splits. Use auto-incremento ou UUID v7/ULID.
- Médio
Diferenças práticas entre MySQL e PostgreSQL
Isolamento padrão (REPEATABLE READ x READ COMMITTED), DDL transacional (Postgres sim), tipos e índices mais ricos no Postgres (JSONB, arrays, GIN, parciais), VACUUM x undo logs.
- Difícil
REPEATABLE READ como padrão no InnoDB
Leituras snapshot repetíveis dentro da transação (sem non-repeatable read). Surpresa: leituras com lock (FOR UPDATE/UPDATE) veem a versão atual, não o snapshot; next-key locks evitam phantoms mas geram deadlock.
- Difícil
Covering index e a ordem das colunas num índice composto
Índice composto serve queries pelo PREFIXO das colunas na ordem (regra ESR). Covering index: contém todas as colunas que a query usa (WHERE + SELECT), então responde sem tocar a tabela (`Using index` no EXPLAIN).
- Médio
`utf8` x `utf8mb4` e collation
`utf8` do MySQL é 3 bytes — não cabe emoji/vários CJK. Use `utf8mb4`. Collation = regras de comparação/ordenação (case/accent sensitivity, ordem por idioma); misturar collations num JOIN quebra índice.
- Difícil
Cenário: deadlock intermitente no InnoDB
Transações se esperando por locks em ordem oposta. InnoDB mata uma — a app deve fazer retry. Reduza: acessar linhas sempre na mesma ordem, transações curtas, índices que travam menos linhas.