Mysql em profundidade-Sobre a ferramenta de interpretação de explicação para analisar instruções SQL

Uso: explique + instrução sql, sem exceção, as seguintes colunas serão exibidas:

EU IA selecione o tipo mesa tipo partições chaves_possíveis chave key_len ref linhas filtrado extra

Os quatro identificados são indícios importantes para analisarmos se o SQL está qualificado

ID (identificador de execução)

Quanto maior for, mais cedo será executado. O mesmo pode ser considerado como o mesmo grupo, e a execução é executada sequencialmente de cima para baixo

select_type (tipo de execução SQL)

  1. simples - seleção simples, sem subconsulta e consulta de união
  2. primário- é a seleção mais externa
  3. union - a segunda e subsequente seleção em união (com subconsulta em união)
  4. subconsulta - a seleção para a primeira subconsulta (com subconsulta dentro da subconsulta)
  5. A segunda e as subseqüentes seleções na união dependente dependem do resultado da consulta externa
  6. subconsulta dependente A seleção da primeira subconsulta depende do resultado da consulta externa
  7. resultado da união: resultado da consulta da união

dependend - geralmente indica que uma subconsulta correlacionada é usada

tabela (tabelas relacionadas à consulta)

tipo (a maneira como o sql é executado)

null > system > const > eq_ref > ref > range > index > all (o documento oficial também tem fulltext> ref_or_null>index_merge>unique_subquery>index_subquery, etc., localizado entre ref e range)

  1. null Você pode obter resultados sem consultar índices e tabelas
  2. Existe apenas um resultado na tabela do sistema (const especial)
  3. Chave primária const ou consulta equivalente de índice exclusivo, apenas um registro será atingido
  4. Quando eq_ref está conectado a uma consulta, a consulta com a chave primária ou índice exclusivo como condição de conexão, o resultado de uma consulta é sempre exclusivo (eficiente)
  5. ref Ao conectar consultas, acesso ao índice, consultas com índices de chave não primária ou índices não exclusivos como condições de conexão (o registro correspondente ao índice pode ser vários registros)
  6. range As consultas que percorrem o índice dentro de um determinado intervalo geralmente aparecem em condições com operações de intervalo como ">,<,>=,<=,in,between,like" (geralmente acima disso, o resultado da otimização é aceito)
  7. index Examinar o índice completo para consulta
  8. all Examina toda a tabela (tente evitá-lo)

partições (partições de tabela para varreduras de posicionamento)

chaves possíveis (listar índices possíveis)

chave (índice adotado oficialmente)

ref (coluna ou constante para comparar com a chave na consulta)

Mostrar quais colunas ou constantes são comparadas com o índice na chave

key_len (comprimento dos dados de dados usando índice)

key_len 采用索引的长度,可以用于判定联合索引的使用情况,使用最左前缀原则计算即可
常见的计算情况:
char(n) 长度n
varchar(n) 按照编码,utf8--3n+2; utf8mb4--4n+2
tinyint 1
smallint 2
middleint 3
int  4
bigint  8
date 3
timestamp 4
datetime 8

如果字段的值没有定义not null 长度+1

linhas (número de linhas que se espera que sejam pesquisadas)

Geralmente quanto menos melhor

filtrado (porcentagem de dados filtrados)

extra (informações extra importantes)

Aqui será explicado o método de execução específico do SQL para realizar a pesquisa de dados. Os mais comuns são:

  1. using index: usando o índice de cobertura, você pode obter os dados desejados do índice sem voltar à consulta da tabela
  2. using where: atua na cláusula where para limitar o número de linhas de dados passadas (retornadas ao usuário ou combinadas com outras tabelas)
  3. usando temporário: (otimização recomendada) usa dados de tabela intermediários, que geralmente aparecem em ordem por
  4. usando filesort: (consumo adicional de recursos da CPU, é recomendável otimizar) é comum, classificação de índice não pode ser usada, operações de classificação adicionais (não necessariamente classificação de arquivo) são necessárias, você pode considerar a otimização do uso de índices ou adicionar índices correspondentes para eliminar
  5. using index condition: Geralmente, quando há muitos campos na linha de leitura e todas as colunas de dados não podem ser obtidas do índice, o ancestral do índice será testado para determinar se é necessário ler toda a linha de dados para ler a tabela (delay push down para ler toda a otimização de linha - otimização de pushdown de condição de índice), que pode remover o consumo desnecessário de E/S para ler de volta à tabela Referência
  6. impossível onde: cláusula where sempre retorna false

Link do documento de referência

  1. Banco de dados oficial de documentos MYSQL (o mais confiável, altamente recomendado, vale a pena ler)
  2. explique – aprendizado de análise de consulta (livro curto, análise é prática, vale a pena ler)

Resumir

  1. Eu uso o "método de anotações de Cornell" para ler o documento inicial, tento entender os pontos-chave, então separar as pistas e, finalmente, resumir e começar a escrever este documento. No processo de escrever o documento, você encontrará que existem muitas ambiguidades. Depois disso, verifique as informações novamente e repita os fragmentos acima, e o conhecimento será mantido na mente aos poucos, é recomendável usar
  2. explica é uma boa ferramenta que pode nos ajudar a analisar se a instrução sql é razoável, se é necessário adicionar ou modificar o índice correspondente, de modo a melhorar a eficiência da consulta

おすすめ

転載: blog.csdn.net/qinmin1/article/details/108025743