Arquitetura MySQL
camada de conexão
Responsável por estabelecer conexões e autenticação com clientes e programas...
camada de serviço
cache do otimizador de consulta do analisador de interface sql
camada do motor
Responsável por conectar-se ao sistema de arquivos de dados e gravar dados
camada de arquivo físico
Responsável por armazenar dados de tabelas e arquivos de log, que dependem de logs
Mecanismo de armazenamento MySQL
O mecanismo é uma tecnologia que interage especificamente com os arquivos do banco de dados. Diferentes métodos de implementação do mecanismo são diferentes.
Mecanismo de banco de dados, implementador específico
Motores comumente usados
Myisam não suporta transações e é adequado para muitas consultas, não suporta chaves estrangeiras, não suporta bloqueios de linha, suporta bloqueios de tabela, suporta índices de texto completo e armazena o número total de linhas na tabela.
select count(*) from admin pode obter diretamente o número total de linhas, o que é rápido
innodb suporta transações, adequado para adições, exclusões e modificações, suporta transações, bloqueios de tabela, bloqueios de linha, suporta cache, suporta incremento automático de chave primária, suporta índices de texto completo e não armazena o número total de linhas na tabela
select count(*) from admin O autocálculo é lento
Insira esta instrução no banco de dados para consultar os mecanismos suportados pelo banco de dados
show engines
índice
O índice de array pode encontrar dados rapidamente em um determinado local por meio do índice
Por que ter um índice?
Se você não usar um índice, a consulta começará na primeira linha e pesquisará linha por linha até que os dados necessários sejam encontrados. Se a quantidade de dados não for grande, a eficiência da consulta será relativamente baixa.
o que é índice
Índices são estruturas de dados que ajudam o MySQL a obter dados de forma eficiente.
Estrutura de dados classificada para pesquisa rápida
Mantenha os dados em uma estrutura de dados para facilitar a pesquisa
Princípio do índice
O índice é semelhante ao catálogo de um livro. Podemos consultar rapidamente nossos dados por meio do catálogo e restringir o escopo da consulta.
Vantagens da indexação
Melhorar a eficiência da recuperação de dados e reduzir o custo de IO do banco de dados;
A classificação de dados por meio de colunas de índice reduz o custo de classificação de dados e reduz o consumo de CPU;
Desvantagens da indexação
Também requer espaço de memória
Ao adicionar, modificar ou excluir operações em uma tabela, você também precisa modificar as informações do índice enquanto opera os dados.
Princípios de criação de índice
Embora os índices sejam bons, não os use indiscriminadamente
Quando um índice é necessário?
A chave primária cria automaticamente um índice exclusivo, índice de chave primária
As colunas usadas como condições de consulta são adequadas para a criação de índices
Recomenda-se criar um índice para chaves estrangeiras
Classificar e agrupar campos são adequados para adicionar índices
Quando não é recomendado usar índices?
Poucos registros de tabela
Adicione, modifique e exclua tabelas usadas com frequência. Divida a tabela original em tabelas separadas para separar a leitura e a gravação.
Não é uma condição de consulta
Os dados são repetidos e distribuídos uniformemente, por exemplo: género
Classificação do índice
Índice de chave primária:
Após definir a chave primária, o banco de dados criará automaticamente um índice. Ele não pode estar vazio. É único. Uma tabela só pode ter uma chave primária.
Índice de valor único:
Um índice contém uma coluna e uma tabela pode ter vários índices de valor único.
Índice único:
Os dados não podem ser repetidos
Índice combinado (índice composto)
Várias colunas em um índice
Princípio do prefixo mais à esquerda para índices combinados
Ao usar um índice combinado, a coluna mais à esquerda deve aparecer, caso contrário o índice será inválido.
Por exemplo, existem três colunas na tabela: a, b e c. Crie um índice combinado para as duas colunas a e b.
Por exemplo, selecione * na tabela onde o índice a=''and b='' entra em vigor
selecione * da tabela onde o índice b=''and a='' entra em vigor
selecione * da tabela onde o índice a=''and c='' entra em vigor
selecione * da tabela onde o índice b=''and c='' não entra em vigor
Use um nome de consulta difusa como %张%; Escrito assim, fará com que o índice da coluna de nome se torne inválido. Não é recomendado usar consulta difusa para semelhantes.
É recomendado usar índice de texto completo no mysql8
Índice de texto completo
Quando a consulta difusa é necessária, o índice geral é inválido e então o índice de texto completo pode ser usado.
CREATE FULLTEXT INDEX 索引名 ON 表名(字段名) WITH PARSER ngram;
SELECT 结构 FROM 表名 WHERE MATCH(列名) AGAINST(搜索词')
Ver índice
SHOW INDEX FROM 表名;
Estrutura de dados do índice
O mecanismo MySQL Innodb usa números B+ como estrutura de dados para armazenar índices por padrão.
Classificado, um nó pode armazenar vários dados. A expansão horizontal reduz a altura dos dados.
Nós não folha não armazenam dados, apenas índices, e mais índices podem ser colocados
Os registros de dados são armazenados em nós folha. Se você encontrar o índice, encontrará os dados.
Há um ponteiro de cadeia entre todos os nós folha, que é muito adequado para consultas de intervalo como: idade>20 idade<50
Índice clusterizado e índice não clusterizado
Índice clusterizado :
Depois que o índice for encontrado, os dados serão encontrados e esse índice será um índice clusterizado.
A chave primária pode encontrar diretamente os dados
Se você consultar o número do aluno com base no valor do número do aluno, poderá acertar diretamente o número do aluno. Nesse cenário, o número do aluno é agrupado.
Índice não clusterizado :
O índice foi encontrado, mas os dados não foram encontrados. Você precisa consultar a tabela novamente com base na chave primária.
Consulte o número e o nome do aluno com base no valor do número do aluno. Embora o número do aluno esteja indexado, o nome ainda precisa ser consultado. A chave primária precisa ser encontrada com base no número do aluno e a consulta é retornada à tabela por meio a chave primária. Este cenário não é clusterizado.
O mecanismo MyISAM usa um design sem cluster, mesmo para índices de chave primária. O arquivo de índice e o arquivo de dados não estão no mesmo arquivo.