[MySql] mecanismo de armazenamento, índice e otimização

Um, o mecanismo de armazenamento

Os mecanismos de armazenamento suportados pelo MySql5.0 incluem: InnoDB, MyISAM, BDB, MEMORY, MERGE, EXAMPLE, NDB Cluster, ARCHIVE, CSV, BLACKHOLE, FEDERATED, etc., onde InnoDB e BDB fornecem tabelas de segurança transacional e outros mecanismos de armazenamento são tabelas de segurança não transacionais .

MySQL5.5之前的默认存储引擎是MyISAM,5.5之后就改为了InnoDB。

Em segundo lugar, várias características do mecanismo de armazenamento

características InnoDBGenericName MyISAMGenericName MEMÓRIA MERGE
limite de armazenamento 64 TB ter ter Não
segurança da transação

apoiar

mecanismo de bloqueio Bloqueio de linha (adequado para alta simultaneidade) fechadura de mesa fechadura de mesa fechadura de mesa
índice de árvore B apoiar apoiar apoiar apoiar
índice de hash apoiar
índice de texto completo Compatível (após a versão 5.6) apoiar
índice de cluster apoiar
índice de dados apoiar apoiar
cache de índice apoiar apoiar apoiar apoiar
Os dados podem ser compactados apoiar
uso do espaço alto Baixo N / D Baixo
uso de memória alto Baixo médio Baixo
Velocidade de Inserção em Massa Baixo alto alto alto
Suporte para chaves estrangeiras apoiar

O seguinte enfoca os dois mecanismos mais usados: InnoDB, MyISAM:

1.InnoDB:

O mecanismo de armazenamento InnoDB é o mecanismo de armazenamento padrão após o Mysql5.5. O mecanismo de armazenamento InnoDB fornece segurança de transação com recursos de confirmação, reversão e recuperação de falhas. A eficiência do processamento de gravação é baixa e ocupará mais espaço em disco para reter dados e índice;

O mecanismo de armazenamento InnoDB é diferente de outros mecanismos de armazenamento: controle de transação, restrições de chave estrangeira ;

Método de armazenamento do mecanismo de armazenamento InnoDB:

Ⅰ. Use armazenamento de espaço de tabela compartilhado. A estrutura da tabela deste método é salva no arquivo .frm, e os dados e índices são salvos no espaço de tabela definido por innodb_data_home_dir e innodb_data_file_path, que podem ser vários arquivos.

Ⅱ. Usando armazenamento em espaço de várias tabelas, a estrutura da tabela criada dessa maneira ainda está no arquivo .frm, mas os dados e índices de cada tabela são salvos separadamente em .ibd.

2.MyISAM:

MyISAM não suporta transações, nem suporta chaves estrangeiras.A vantagem é que a velocidade de acesso é rápida, e não há exigência de integridade da transação ou Select, aplicativos baseados em Insert podem basicamente usar este mecanismo para criar tabelas;

Método de armazenamento do mecanismo de armazenamento MyISAM:

Cada MyISAM armazena 3 arquivos em disco com o mesmo nome de arquivo e nome de tabela, mas com as extensões:

.frm (definição da tabela de armazenamento);

.MYD(MYData, armazenar dados);

.MYI(MYIndex, índice de armazenamento);

Em terceiro lugar, a escolha do mecanismo de armazenamento

Ao selecionar um mecanismo de armazenamento, um mecanismo de armazenamento apropriado deve ser selecionado de acordo com as características do sistema de aplicação. Para sistemas de aplicativos complexos, vários mecanismos de armazenamento também podem ser selecionados para combinação de acordo com a situação real. A seguir estão os ambientes de uso de vários mecanismos de armazenamento comumente usados.

  • InnoDB: É o mecanismo de armazenamento padrão depois do Mysql5.5, usado para aplicativos de processamento de transações e suporta chaves estrangeiras. Se o aplicativo tiver requisitos relativamente altos para a integridade da transação, exigir consistência de dados em condições simultâneas e as operações de dados incluírem muitas operações de atualização e exclusão, além de inserção e consulta, o mecanismo de armazenamento InnoDB é uma escolha mais adequada. O mecanismo de armazenamento InnoDB não apenas reduz efetivamente o bloqueio causado por exclusão e atualização, mas também garante o envio completo e a reversão de transações. Para sistemas com requisitos de alta precisão de dados, como sistemas de cobrança ou sistemas financeiros, o InnoDB é a escolha mais adequada.

  • MyISAM: Se o aplicativo é principalmente operações de leitura e inserção, com apenas algumas operações de atualização e exclusão, e os requisitos para integridade e simultaneidade da transação não são muito altos, então este mecanismo de armazenamento é muito adequado para escolher.

Em quarto lugar, o índice

1. Estrutura do índice

estrutura de índice descrever
Índice B+Árvore O tipo de índice mais comum, a maioria dos índices suporta índice de árvore B+
índice de hash É compatível apenas com o mecanismo de memória e a estrutura de dados subjacente é implementada com uma tabela de hash. Somente as consultas que correspondem exatamente a todas as colunas do índice são válidas e as consultas de intervalo não são suportadas.
R-tree (índice espacial) O índice espacial é um tipo de índice especial do mecanismo MyISAM, usado principalmente para tipos de dados geoespaciais, geralmente usado menos
Texto completo (índice de texto completo) O índice de texto completo procura palavras-chave no texto, em vez de comparar os valores no índice, semelhante a Lucene, Solr, ES

2. Classificação do índice

(por atributo)

Classificação significado características palavras-chave
índice de chave primária Índice criado na chave primária da tabela Criado automaticamente por padrão, apenas um PRIMÁRIO
índice único Evite valores duplicados em uma coluna de dados na mesma tabela pode ter vários EXCLUSIVO
índice regular Localize rapidamente dados específicos pode ter vários
índice de texto completo O índice de texto completo procura palavras-chave no texto, em vez de comparar valores no índice pode ter vários TEXTO COMPLETO


(de acordo com o método de armazenamento de dados)

Classificação significado características estrutura de índice
índice clusterizado/clusterizado Armazene os dados no índice e coloque-os juntos, e os nós folha da estrutura do índice salvam os dados da linha deve ter, e apenas um
Índice Não Agrupado/Índice Secundário/Índice Secundário Armazene os dados separadamente do índice e os nós folha da estrutura do índice são associados à chave primária correspondente pode haver vários

3. Evite falhas no índice

Ⅰ. Correspondência global, especificando valores específicos para todas as colunas do índice.

Ⅱ Se várias colunas forem indexadas, a regra de prefixo mais à esquerda deve ser seguida. Isso significa que a consulta começa na coluna frontal mais à esquerda do índice e não pode pular colunas no índice.

Ⅲ. A coluna do lado direito da consulta de intervalo não pode usar o índice.

Ⅳ. Não execute operações na coluna do índice, caso contrário, o índice falhará.

Ⅴ Strings sem aspas simples farão com que o índice falhe.

Ⅵ Tente usar o índice de cobertura e reduza o uso de select *, mas se a coluna de consulta exceder a coluna de índice, o desempenho será reduzido.

Ⅶ Condições separadas por ou, se houver um índice na condição antes de ou, mas não houver índice na coluna seguinte, os índices envolvidos não serão usados.

Ⅷ. Para consultas semelhantes, começando com %, o índice será inválido; se for apenas a correspondência difusa da cauda, ​​o índice não será inválido; se for a correspondência difusa da cabeça, o índice será inválido.

Ⅸ Se o mysql avaliar usando índices mais lentos do que tabelas completas, os índices não são aplicáveis.

Ⅹ. é nulo, não é nulo às vezes o índice é inválido; in, not in às vezes o índice é inválido;

4. Princípios de design do índice

  • Para tabelas com alta frequência de consulta e grande volume de dados.

  • Para a seleção dos campos de índice, as melhores colunas candidatas devem ser extraídas das condições da cláusula where.

  • Usando um índice único, quanto maior o grau de discriminação, maior a eficiência do uso do índice.

  • Os índices podem efetivamente melhorar a eficiência da consulta de dados, mas o número de índices nem sempre é melhor. Quanto mais índices houver, o custo de manutenção dos índices aumentará naturalmente.

  • Com um índice curto, o disco rígido também é usado para armazenar o índice depois que ele é criado, portanto, melhorar a eficiência de E/S do acesso ao índice também pode melhorar a eficiência geral do acesso.

  • Usando o índice mais composto, um índice composto composto por N colunas é equivalente à criação de índices N. Se os primeiros campos que compõem o índice forem usados ​​na cláusula where durante a consulta, então esta consulta SQL pode ser usada Combinar índices para melhorar eficiência da consulta.

建议使用复合索引,少使用单列索引。

Cinco, otimização de SQL

Primeiro, observe a ordem das instruções SQL

编写顺序
SELECT DISTINCT
	<select list>
FROM
	<left_table> <join_type>
JOIN
	<right_table> ON <join_condition>
WHERE
	<where_condition>
GROUP BY
	<group_by_list>
HAVING
	<having_condition>
ORDER BY
	<order_by_condition>
LIMIT
	<limit_params>

-----------------------------------------------------------------------------------------

执行顺序
FROM	<left_table>

ON 		<join_condition>

<join_type>		JOIN	<right_table>

WHERE		<where_condition>

GROUP BY 	<group_by_list>

HAVING		<having_condition>

SELECT DISTINCT		<select list>

ORDER BY	<order_by_condition>

LIMIT		<limit_params>

1. Otimize a instrução de inserção

Se você precisar inserir muitas linhas de dados em uma tabela ao mesmo tempo, tente usar a instrução insert de tabelas de vários valores. Esse método reduzirá muito a conexão entre o cliente e o banco de dados e o consumo de fechamento; os dados devem ser inseridos tanto quanto possível inserção de sequência;

2. Otimize o pedido por extrato

Deixe-me falar sobre os dois métodos de classificação primeiro:

Ⅰ: A classificação por retorno de dados, ou seja, a classificação usual do filesort, toda classificação que não retorna diretamente os resultados da classificação por meio do índice é chamada de classificação FileSort.

Ⅱ: Examine sequencialmente os dados ordenados retornados diretamente pelo índice ordenado. Este é o índice de uso, que não requer classificação adicional e possui alta eficiência operacional.

Depois de entender os dois métodos de classificação, o objetivo da otimização é claro: minimizar a classificação adicional, retornar dados ordenados diretamente pelo índice, onde condição e ordem por usam o mesmo índice, e a ordem de ordem por é a mesma que a ordem do índice e order by Os campos estão em ordem crescente ou decrescente. Caso contrário, operações adicionais são definitivamente necessárias, então FileSort aparece.

Para FileSort, o mysql tem dois algoritmos de classificação: um é (algoritmo de duas varreduras): primeiro remova o campo de classificação e as informações do ponteiro de linha de acordo com as condições e, em seguida, classifique no buffer de classificação. Se o buffer de classificação não for suficiente, ele irá ser classificados na tabela temporária Os resultados classificados são armazenados na tabela. Após a conclusão da classificação, leia os registros de volta à tabela de acordo com o ponteiro de linha, o que pode causar um grande número de operações de E/S aleatórias. O outro é (algoritmo de varredura única): retire todos os campos que atendem às condições de uma vez e, em seguida, imprima o conjunto de resultados diretamente após a classificação no buffer de classificação. A sobrecarga de memória da classificação é grande, mas a eficiência da classificação é maior do que a do algoritmo de duas varreduras.

O MySQL julga se é um algoritmo de classificação comparando o tamanho da variável de sistema max_length_for_sort_data com o tamanho total dos campos extraídos pela instrução Query. Se max_length_for_sort_data for maior, use o segundo algoritmo otimizado; caso contrário, use o primeiro.

Você pode aumentar apropriadamente as variáveis ​​de sistema sort_buffer_size e max_length_for_sort_data para aumentar o tamanho da área de classificação e melhorar a eficiência da classificação.

3. Otimize o grupo por instrução

Como group by também realiza operações de classificação e, em comparação com order by, group by tem principalmente mais operações de agrupamento após a classificação. É claro que, se algumas funções de agregação forem usadas no agrupamento, algumas funções de agregação também serão calculadas. , portanto, na implementação de group by, também podemos usar o index.

Se a consulta contém group by, mas o usuário deseja evitar o consumo de resultados classificados, order by null pode ser executado para desabilitar a classificação.

4. Otimize as consultas aninhadas

Após a versão Mysql4.1, as subconsultas SQL são suportadas. Essa técnica usa a instrução SELECT para criar um resultado de consulta de coluna única e, em seguida, usa esse resultado como uma condição de filtro em outra consulta. O uso de subconsultas pode concluir muitas operações SQL que exigem logicamente várias etapas para serem concluídas ao mesmo tempo e também pode evitar bloqueios de transação ou tabela e é fácil de escrever. No entanto, em alguns casos, as subconsultas podem ser substituídas por conexões mais eficientes (JOIN).

5. Otimizar ou condicionar

Para cláusulas de consulta contendo OR, se índices devem ser usados, índices devem ser usados ​​para cada coluna condicional entre ORs e índices compostos não podem ser usados; se não houver índices, você deve considerar a adição de índices. Recomenda-se usar união em vez de ou;

6. Usando dicas de SQL

O prompt SQL é um meio importante de otimizar o banco de dados.Simplificando, é adicionar alguns prompts artificiais à instrução SQL para atingir o objetivo de otimizar a operação.

1. Após o nome da tabela na instrução de consulta, adicione use index para fornecer uma lista de índices aos quais você deseja que o MySQL se refira, para que o MySQL não considere mais outros índices disponíveis.

select * from tb_user use index(idx_seller_name) where name = 'zhangsan';

2. Se o usuário simplesmente deseja que o MySQL ignore um ou mais índices, você pode usar ignore index como uma dica.

select * from tb_user ignore index(idx_seller_name) where name = 'zhangsan';

3. Para forçar o MySQL a usar um índice específico, use force index como uma dica na consulta.

select * from tb_user force index(idx_seller_name) where name = 'zhangsan';

Acho que você gosta

Origin blog.csdn.net/qq_42990433/article/details/121767859
Recomendado
Clasificación