Alto desempenho otimização de desempenho de consulta mysql Capítulo VI (1)

De um modo geral, o ciclo de vida de uma consulta pode ser mais ou menos na ordem de vista: a partir do cliente para o servidor e, em seguida, analisar no servidor, plano de execução, executar e retornar os resultados para o cliente.

Três indicadores para MySQL, a medida mais simples do custo de uma consulta da seguinte maneira:
Tempo de resposta
O número de linhas digitalizada
Número de linhas retornadas
A execução da consulta subjacente:
O cliente envia uma consulta para o servidor.
O servidor primeiro verifica o cache de consultas se um cache bateu, em seguida, retornar imediatamente os resultados armazenados no cache. Caso contrário, prossiga para a próxima fase.
do lado do servidor de análise SQL, pré-tratamento, e, em seguida, o plano de execução correspondente gerado pelo otimizador.
De acordo com o plano de implementação MySQL gerado pelo otimizador, a API do mecanismo de armazenamento chamadas para executar a consulta.
Os resultados são retornados para o cliente.
Verifique o status:
Sono: o segmento está aguardando o cliente para enviar uma nova solicitação.
Inquérito: thread está executando uma consulta ou está a enviar os resultados para o cliente.
Bloqueado: Na camada de servidor MySQL, o segmento está aguardando um bloqueio de tabela.
Análise e estatísticas: o fio é coletar mecanismo de armazenamento de informação estatística, e gerar um plano de execução para a consulta.
Copiando para tmp tabela [no disco]: o segmento está executando uma consulta, eo conjunto de resultados são copiados para uma tabela temporária, este estado é geralmente quer fazer GROUP BY operações, tanto as operações de triagem de arquivo ou operações UNION. Se este estado lá "no disco" marca, isso significa que o MySQL é uma tabela temporária para a memória no disco.
Classificando resultado: o fio é classificar o conjunto de resultados.
O envio de dados: Isso representa uma variedade de situações: thread pode transferir dados entre uma pluralidade de estados, ou gerar um conjunto de resultados, ou os dados retornados para o cliente.
MySQL Existem dois algoritmos de classificação:
Duas transmissões ordenação (versão antiga):
Leia campo ponteiro linha e precisa classificar, classificá-los, e depois de ler a linha de dados de acordo com o resultado de classificação desejada.
Ordenar única transferência (nova versão):
Primeiro ler todas as colunas necessárias para a consulta e, em seguida, classificadas de acordo com a coluna dada, e finalmente voltou diretamente para classificar os resultados.
otimizador de consulta Tip (dica):
HIGH_PRIORITY 和 LOW_PRIORITY
Esta dica diz MySQL, quando várias instruções simultaneamente acessar uma tabela em particular, a prioridade dos quais declarações são comparativamente alta prioridade que a afirmação é relativamente baixo.
Quando HIGH_PRIORITY para as instruções SELECT, o MySQL será remarcada para a mesa até que todos estão esperando o bloqueio para modificar dados nesta declaração instrução SELECT. HIGH_PRIORITY também pode ser usado para a instrução INSERT, o efeito é simplesmente para compensar o impacto da declaração configurações LOW_PRIORITY global.
LOW_PRIORITY é justamente o oposto: ele faz a declaração está em um estado de espera, há longas filas precisam ter acesso à mesma declaração de uma mesa ---- mesmo aqueles que a declaração que a declaração também posteriormente enviada para o servidor.
Ambas as ideias são válidas apenas para o uso do mecanismo de armazenamento bloqueio de tabela.
ATRASO
Esta dica é válida para INSERT e REPLACE. MySQL irá usar a instrução de prompt retorna imediatamente para o cliente, e colocado em linhas inseridas no buffer e, em seguida, grava os dados na tabela de lote está ocioso.
STRAIGHT_JOIN
Após esta dica pode ser colocado no SELECT palavra-chave instrução SELECT, ele também pode ser colocado entre dois nomes tabela associada. O primeiro é fazer uso de todas as tabelas na consulta associada com a ordem em que aparecem no comunicado. A segunda regra é associada a uma seqüência fixa antes e depois das duas tabelas.
SQL_SMALL_RESULT 和 SQL_BIG_RESULT
Estas duas ideias são válidas apenas para as instruções SELECT. Eles dizem que o otimizador para GROUP BY ou consulta DISTINCT como usar uma tabela temporária e tipo. SQL_SMALL_RESULT dizer ao otimizador que o resultado é muito pequeno rali, o resultado pode ser colocado na memória temporária na tabela de índice para evitar operação de classificação. Se SQL_BIG_RESULT, em seguida, dizer ao otimizador que o conjunto de resultados podem ser muito grandes, é recomendado o uso de uma tabela temporária para fazer operações de disco de classificação.
SQL_BUFFER_RESULT
Esta dica diz o coloca otimizador os resultados da consulta em uma tabela temporária, em seguida, desbloquear as mesas mais rápido possível.
SQL_CACHE soma SQL_NO_CACHE
Esta dica diz MySQL conjunto de resultados se este deve ser armazenado em cache no cache de consultas.
SQL_CALC_FOUND_ROWS
Isso fará com que o MySQL retorna o conjunto de resultados contém mais informações. MySQL consulta mais a pronta remoção do total será calculado após a cláusula LIMIT do conjunto de resultados da consulta para ser devolvido, mas na verdade apenas retornar um resultado requisitos Definir limite. Este valor pode ser obtido por um FOUND_ROW função ().
FOR UPDATE 和 LOCK IN SHARE MODE
Isto levou dois mecanismos principais de controle de bloqueio da instrução SELECT, mas apenas eficaz para alcançar o mecanismo de armazenamento de bloqueio em nível de linha. Use as dicas irá coincidir com as linhas de bloqueio de consulta.
USE INDEX, IGNORE INDEX 和 FORCE INDEX
Essas dicas vão dizer o otimizador a usar ou que não utiliza um índice para registro de consulta.
Em MySQL5.0 e, mais tarde, adicione alguns dos parâmetros utilizados para controlar o comportamento do otimizador:
optimizer_search_depth
Este parâmetro controla limitar o otimizador no plano de execução exaustiva.
optimizer_prune_level
Este parâmetro é ativado por padrão, o que torna o otimizador irá decidir se a ignorar alguns do plano de implementação com base no número de linhas a serem verificados.
optimizer_switch
Esta variável contém uma série de on / off características bandeira otimizador.

Acho que você gosta

Origin www.cnblogs.com/zhishuiyushi/p/12444482.html
Recomendado
Clasificación