[Mysql] Otimização de desempenho Mysql

explicar os parâmetros do plano de execução em detalhes

mysql> explain select * from kt_course order by create_time desc;
+----+-------------+-----------+------+---------------+------+---------+------+------+----------------+
| id | select_type | table     | type | possible_keys | key  | key_len | ref  | rows | Extra          |
+----+-------------+-----------+------+---------------+------+---------+------+------+----------------+
|  1 | SIMPLE      | kt_course | ALL  | NULL          | NULL | NULL    | NULL |   29 | Using filesort |
+----+-------------+-----------+------+---------------+------+---------+------+------+----------------+
1 row in set

selecione o tipo

1) SIMPLES: SELECT simples, UNION ou subconsulta não prático.
2) PRIMÁRIO: o SELECT mais externo.
3) UNION: A segunda camada usa UNION após SELECT.
4) UNIÃO DEPENDENTE: O segundo SELECT na instrução UNION depende da subconsulta externa.
5) RESULTADO DA UNIÃO: O resultado da UNIÃO.
6) SUBQUERY: O primeiro SELECT na subconsulta.
7) SUBQUERY DEPENDENTE: O primeiro SELECT na subconsulta depende da consulta externa.
8) DERIVED: SELECT da tabela exportada (subconsulta da cláusula FROM)

mesa

Mostrar em qual tabela os dados desta linha são sobre

tipo

typeO campo é mais importante: identifica se a consulta é eficiente, se é usada 全表扫描ou está 索引扫描aguardando.

Esta é uma coluna importante que mostra que tipo de conexão é usada.
Tipos de conexão do melhor ao pior: const, eq_reg, ref, range, index e ALL

Tipo: informe o método de acesso usado para a tabela, incluindo principalmente os seguintes tipos centralizados.

1) tudo: verificação completa da tabela.
2) const: leia constante, no máximo haverá apenas uma correspondência de registro, porque é uma constante, na verdade, só é necessário ler uma vez.
3) eq_ref: haverá no máximo um resultado correspondente, que geralmente é acessado por meio da chave primária ou do índice de chave exclusiva.
4) texto completo: pesquisa de índice de texto completo.
5) índice: verificação completa do índice.
6) index_merge: use dois (ou mais) índices na consulta ao mesmo tempo, mescle os resultados do índice (mesclagem) e leia os dados da tabela.
7) index_subquery: A combinação de campo de resultado retornado na subconsulta é um índice (ou combinação de índices), mas não uma chave primária ou índice exclusivo.
8) tocou: Varredura de faixa de índice.
9) ref: a consulta referenciada pelo índice da tabela acionada na instrução Join.
10) ref_or_null: a única diferença de ref é a consulta que adiciona um valor vazio além da consulta referenciada pelo índice.
11) sistema: tabela do sistema, há apenas uma linha de dados na tabela;
12) subconsulta única: a combinação do campo de resultado retornado na subconsulta é a chave primária ou a restrição exclusiva.

possible_keys

Mostre os índices que podem ser aplicados nesta tabela. Se estiver vazio, não há índice possível. Você pode selecionar uma declaração adequada na declaração WHERE para o domínio relevante

chave

O índice real usado. Se NULL, nenhum índice é usado. Em casos raros, o MYSQL escolherá um índice sub-otimizado. Nesse caso, você pode usar USE INDEX (indexname) na instrução SELECT para forçar um índice ou IGNORE INDEX (indexname) para forçar o MYSQL a ignorar o índice

key_len

O comprimento do índice usado. Sem perder a precisão, quanto menor o comprimento, melhor

método de cálculo key_len  https://www.cnblogs.com/gomysql/p/4004244.html

ref

Mostrar qual coluna do índice foi usada, se possível, uma constante

linhas

O otimizador de consultas mysql estima o número de linhas de dados que precisam ser varridas e lidas pelo sql para encontrar o conjunto de resultados com base em informações estatísticas.Este valor pode refletir intuitivamente a eficiência do sql.Em princípio, quanto menor o valor das linhas, melhor

Extra

Informações adicionais sobre como o MYSQL analisa consultas. Serão discutidos na Tabela 4.3, mas os maus exemplos que você pode ver aqui são Using temporary e Using filesort, o que significa que o MYSQL não pode usar índices, e o resultado é que a recuperação será lenta

Explicação de campo extra

Extra: informações detalhadas detalhadas sobre cada etapa da consulta, principalmente as seguintes.

Distinct: Encontre o valor distinto.Quando o mysql encontrar o primeiro resultado correspondente, ele interromperá a consulta desse valor e mudará para outros valores posteriormente.

Varredura completa na chave NULL: Um método de otimização em subconsultas, principalmente no uso de valores nulos que não podem ser acessados ​​pelo índice.

Intervalo verificado para cada registro (mapa de índice: N): De acordo com a descrição do manual oficial do MySQL, quando o MySQL Query Optimizer não encontra um bom índice que possa ser usado, se os valores da coluna da tabela anterior forem conhecidos, alguns índices poderão ser usados. Para cada combinação de linhas na tabela anterior, o MySQL verifica se o método de acesso range ou index_merge pode ser usado para solicitar a linha.

Tabelas SELECT otimizadas: quando usamos determinadas funções de agregação para acessar um campo que possui um índice, o MySQL Query Optimizer localiza diretamente as linhas de dados necessárias de uma só vez através do índice para concluir a consulta inteira. Obviamente, a premissa é que não pode haver operação GROUP BY no Query. Ao usar MIN () ou MAX ().

Usando filesort: Quando a operação ORDER BY está incluída no Query, e o índice não pode ser usado para concluir a operação de classificação, o MySQL Query Optimizer precisa escolher o algoritmo de classificação correspondente a ser alcançado.

Usando o índice: os dados necessários podem ser obtidos apenas no Índice, sem necessidade de ir para a tabela para obter os dados.

Usando o índice para agrupar por: o acesso aos dados é o mesmo que Usando o índice, os dados necessários precisam apenas ler o índice, ao usar a cláusula GROUP BY ou DISTINCT na Consulta, se o campo de agrupamento também estiver no índice, as informações no Extra serão Usando o índice para agrupar por.

Usando temporário: Quando o MySQL deve usar tabelas temporárias em determinadas operações, o uso temporário aparece nas informações extras. Principalmente comum em operações como GROUP BY e ORDER BY.

Usando where: se você não lê todos os dados da tabela ou pode obter todos os dados necessários apenas indexando, Usando as informações onde.

Utilizando where com condição enviada: Essa é uma mensagem que aparece apenas no mecanismo de armazenamento NDBCluster e também precisa ser ativada, ativando a função de otimização Push de Condição antes que ela possa ser usada. O parâmetro de controle é engine_condition_pushdown.

Impossível ONDE foi observado após a leitura de tabelas const: O MySQL Query Optimizer julga que pode não haver resultado através das informações estatísticas coletadas.

Sem tabelas: use FROM DUAL na instrução Query ou não inclua nenhuma cláusula FROM.

Não existe: em algumas associações à esquerda, o MySQL Query Optimizer otimiza o método usado alterando a composição da consulta original, o que pode reduzir parcialmente o número de acessos a dados.

otimização de junção

Requisitos: Estatísticas dos mesmos dados orgid na tabela org_knowledge_department_active_week (16,64 milhões) e na tabela org_knowledge_department_study_month (2,8 milhões).

informações da estrutura org_knowledge_department_active_week

informações da estrutura org_knowledge_department_study_month

 

EXPLAIN
SELECT
  *
FROM
  org_knowledge_department_active_week t1
  STRAIGHT_JOIN org_knowledge_department_study_month t2
    ON t1.orgid = t2.orgid

Este processo de execução da instrução SQL:

  1. Leia uma linha de dados R da tabela t1
  2. Pegue o campo orgid dos dados R e procure na tabela t2
  3. Retire os dados que atendem às condições da tabela t2 e forme uma linha com R como parte do conjunto de resultados
  4. Repita as etapas 1 a 3 até o final da tabela t1

Este algoritmo é Index Nested-Loop Join (NLJ): pesquisa aninhada e usa o índice da tabela acionada.

tabela t1

tabela t2

 

algoritmo de junção:

Junção de loop aninhado ao índice (NLJ):

 

Junção de loop aninhado de bloco (INL):

 

Conclusão

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Publicado 61 artigos originais · ganhou elogios 2 · Vistas 7303

Acho que você gosta

Origin blog.csdn.net/hebaojing/article/details/103192776
Recomendado
Clasificación