← MySQL: desenvolvimento e operação segura
02 / 12 · 40 MIN

Consultas determinísticas e planos

Explica o resultado pretendido antes de otimizar o acesso.

Conceito e mecanismo

Uma consulta pode executar sem erro e continuar a ter significado ambíguo. Ao agrupar por fundo e selecionar um trader, pergunta se esse trader é determinado pelo grupo. ONLY_FULL_GROUP_BY deteta muitos casos sem dependência funcional; desativá-lo pode deixar o motor escolher um valor arbitrário. ORDER BY aplicado ao resultado não escolhe a linha que representa cada grupo. ANY_VALUE também não significa mais recente. Na paginação, acrescenta uma chave única para desempatar valores iguais de ordenação. Isso estabiliza a ordem para o mesmo conjunto de dados, mas não congela alterações concorrentes entre pedidos.

Aplicação guiada

Num relatório fictício, compara estimativas com linhas reais antes de propor um índice. EXPLAIN ANALYZE executa o comando suportado para recolher métricas, pelo que precisa de um ambiente e carga controlados. Um índice composto tem ordem: filtros alinhados com o prefixo esquerdo são candidatos úteis, mas o plano final depende dos dados e do custo. Using filesort indica uma fase de ordenação, não prova de escrita em disco. Mede frequência, latência, volume e impacto nas escritas. O teste de aceitação deve incluir grupos com vários elementos e empates, além de dados suficientemente representativos para avaliar o ganho.

NA PRÁTICA

ORDER BY created_at, id resolve empates de timestamp quando id é único; não cria uma snapshot entre páginas.

Armadilhas comuns

Sem erro como correto; ANY_VALUE como último; filesort como disco; índice composto como índices independentes.

Tópicos relacionados: Tipos e contratos dos dados · Transações InnoDB e caminhos de erro · Integração segura e identidade efetiva

Leva esta ideia contigo

Valida significado e desempenho com exemplos que distingam as alternativas.

Criar conta

Referência: Deterministic grouping and functional dependence · MySQL 9.7 LTS with InnoDB reference semantics

MySQL® é uma marca registada da Oracle e/ou das suas afiliadas. A dr.pt é uma plataforma de preparação independente e não está afiliada, associada, patrocinada, autorizada nem aprovada por Oracle. Os conteúdos e as perguntas são originais, não são perguntas oficiais de exame, e concluir os nossos testes não atribui nem garante qualquer certificação. Os nomes são usados apenas para identificar o tema. Todas as outras marcas pertencem aos respetivos titulares.