Falaaa Galerinha !!!
Nesta postagem irei demonstrar e explicar o quanto uma chave primária é importante para qualquer ambiente.
- O crime -> Criar tabela sem PK.
Para o desenvolvedor, uma tabela é só uma PLANILHA EXCEL GLORIFICADA. Para nós DBA’s, uma tabela sem PRIMARY KEY (PK) é um desastre anunciado. Sem Primary Key, a InnoDB fica perdida, tentando criar um índice interno (o famosoo Share Row ID) que acabará virando um gargalo quando o sistema cresce exponencialmente.
No português claro, é o contexto de morarmos em um Prédio onde os apartamentos não possuem numeração. Assim, imaginamos um entregador (MySQL) tentando achar o local da entrega.
- O castigo.
Para aquelas que utilizam de MySQL Cluster ou Group Replication, a PK não é opcional, e sim OBRIGATÓRIA.
Se o desenvolvedor insiste em continuar neste contexto de tabelas “peladas”, a replicação engasga.
O nó secundário tem que escanear a tabela inteira para achar uma linha que foi alterado no primário. Resultado? Lag de replicação INFINITO…..
E vemos a famosa frase: Acionem o DBA, estamos com o ambiente em atraso.
- A solução “Ninja”: (GIPK)
Aqui vemos o pulo do gato implementado no MySQL 8.0.
O DBA simplesmente ativa o “sql_generate_invisible_primary_key = ON”.
- O que o DEV vê: A mesma “tabelinha” capenga de sempre.
- O que o MySQL faz: Cria uma coluna “my_row_id” potente, com Auto_increment, mas deixando-a escondida.
- Vantagem: O select * (all) do DEV continua funcionando (sem quebrar a aplicação engessada dele), mas o Cluster agora tem um ID sólido para replicar os dados na velocidade da LUZ.
Vamos as demonstrações técnicas.
- O famoso CREATE TABLE.
- Leitura simples + plano de execução demonstrando a má performance.
- Checagem + ativição da váriavel.
- Novamente, CREATE TABLE porém com váriavel ativa.
- Formato correto de demonstração via DISPLAY (Prompt).
- Plano de execução demonstrando ganhos com o uso da chave primária (invisible) ao invés de demais colunas.
Dica do DBA!!!
No sistema atual de cada um, poderão realizar a ATIVAÇÃO desta chave primária manualmente ou atráves desta variável definida em SISTEMA.
Como abaixo demonstro uma tabela existente com dados, e por via de regras precisaria de CHAVE PRIMÁRIA.
Temos a possibilidade de apresentar a coluna para consultas via INFORMATION_SCHEMA.COLUMNS com a definição (show_gipk_in_create_table_and_information_schema = ON).
Antes de tudo, revisem sempre o sistema atual de seu cliente.
Referências.
MySQL MeetUP 2023 – Apresentação Vinicius Grippa. (partipação plateia).
https://dev.mysql.com/doc/refman/8.0/en/create-table-gipks.html
https://dev.mysql.com/doc/refman/8.0/en/invisible-columns.html














COMENTÁRIOS
Parabéns!