Galeria de mapas mentais Mapa de conhecimento MySQL
Sobre o mapa de conhecimento do MySQL, ele inclui principalmente a arquitetura lógica do MySQL, Estrutura de dados de armazenamento MySQL, mecanismo de armazenamento MySQL, Sequência de execução SQL, otimização de índice, otimização SQL, etc.
Editado em 2023-12-16 22:43:28A segunda unidade do Curso Obrigatório de Biologia resumiu e organizou os pontos de conhecimento, abrangendo todos os conteúdos básicos, o que é muito conveniente para todos aprenderem. Adequado para revisão e visualização de exames para melhorar a eficiência do aprendizado. Apresse-se e colete-o para aprender juntos!
Este é um mapa mental sobre Extração e corrosão de mim. O conteúdo principal inclui: Corrosão de metais, Extração de metais e a série de reatividade.
Este é um mapa mental sobre Reatividade de metais. O conteúdo principal inclui: Reações de deslocamento de metais, A série de reatividade de metais.
A segunda unidade do Curso Obrigatório de Biologia resumiu e organizou os pontos de conhecimento, abrangendo todos os conteúdos básicos, o que é muito conveniente para todos aprenderem. Adequado para revisão e visualização de exames para melhorar a eficiência do aprendizado. Apresse-se e colete-o para aprender juntos!
Este é um mapa mental sobre Extração e corrosão de mim. O conteúdo principal inclui: Corrosão de metais, Extração de metais e a série de reatividade.
Este é um mapa mental sobre Reatividade de metais. O conteúdo principal inclui: Reações de deslocamento de metais, A série de reatividade de metais.
MySQLAvançado
Sintaxe básica e regras de verificação do sql_mode
ONLY_FULL_GROUP_BY
Para operação de agregação GROUP BY, se a coluna em SELECT não aparecer em GROUP BY, então este SQL é ilegal porque a coluna não está na cláusula GROUP BY
NO_AUTO_VALUE_ON_ZERO
Este valor afeta a inserção de colunas de aumento automático. Nas configurações padrão, inserir 0 ou NULL representa a geração do próximo valor de aumento automático. Caso o usuário queira que o valor inserido seja 0 e a coluna aumente automaticamente, remova esta opção.
STRICT_ALL_TABLES
STRICT_TRANS_TABLES
Para tabelas habilitadas para transação, os dois modos são idênticos: se um valor for considerado ausente ou ilegal, o MySQL lançará um erro e a instrução irá parar de ser executada e será revertida.
NO_ZERO_IN_DATE
No modo estrito, zeros de dia e mês não são permitidos
NO_ZERO_DATE
Definindo este valor, o banco de dados MySQL não permite a inserção de datas zero, e a inserção de datas zero gerará um erro em vez de um aviso.
ERROR_FOR_DIVISION_BY_ZERO
Erro de divisão por 0
NO_ENGINE_SUBSTITUTION
Se o mecanismo de armazenamento necessário estiver desabilitado ou não existir, um erro será gerado. Quando esse valor não é definido, o mecanismo de armazenamento padrão é usado.
Arquitetura lógica MySQL
Visão geral geral da arquitetura lógica
camada de conexão
A camada superior é composta por alguns serviços de cliente e conexão, incluindo comunicação de soquete local e a maioria das comunicações semelhantes a TCP/IP baseadas em ferramentas cliente/servidor.
Ele conclui principalmente alguns processamentos de conexão, autenticação de autorização e soluções de segurança relacionadas. O conceito de pool de threads é introduzido nesta camada para fornecer threads para clientes que acessam com segurança por meio de autenticação.
camada de serviço
A arquitetura de segunda camada completa principalmente a maioria das funções básicas do serviço, como interfaces SQL, e completa consultas em cache, análise e otimização de SQL e a execução de algumas funções integradas.
Nesta camada, o servidor irá analisar a consulta e criar a árvore de análise interna correspondente, e completar a otimização correspondente: como determinar a ordem da tabela de consulta, se deve usar índices, etc., e finalmente gerar a operação de execução correspondente
serviços essenciais
Serviços de gerenciamento e utilitários: ferramentas de gerenciamento e controle de sistemas
Interface SQL: Interface SQL
Aceite os comandos SQL dos usuários e retorne os resultados que os usuários precisam consultar. Por exemplo, selecione from para chamar a interface SQL
Analisador: Analisador
Quando o comando SQL é passado para o analisador, ele será verificado e analisado pelo analisador.
Otimizador: otimizador de consulta
A instrução SQL usará o otimizador de consulta para otimizar a consulta antes de consultar.
Cache e Buffer: cache de consulta
Se o cache de consulta tiver um resultado de consulta de acerto, a instrução de consulta poderá ir diretamente para o cache de consulta para recuperar os dados.
Este mecanismo de cache é composto por uma série de pequenos caches. Por exemplo, cache de tabela, cache de registro, cache de chave, cache de permissão, etc.
Versões posteriores ao MySQL 8.0 excluem diretamente o cache de consulta
camada do motor
Camada do mecanismo de armazenamento, o mecanismo de armazenamento é realmente responsável pelo armazenamento e recuperação de dados no MySQL, e o servidor se comunica com o mecanismo de armazenamento por meio de API. Diferentes motores de armazenamento têm funções diferentes, pelo que podemos escolher de acordo com as nossas reais necessidades.
camada de armazenamento
A camada de armazenamento de dados armazena principalmente dados no sistema de arquivos em execução no dispositivo bruto e completa a interação com o mecanismo de armazenamento.
Ciclo de execução SQL
Ative o cache de consulta SQL
Método 1: Modifique o arquivo de configuração e adicione informações de configuração
No Windows é my.ini
No Linux é my.cnf
Método 2: use o comando mysql
definir query_cache_type global = 1;
Consultar se o cache está ativado
mostrar variáveis como '%profiling%';
Estrutura de dados de armazenamento MySQL
Buscando velocidade de consulta eficiente B-tree
Árvore B
complexidade de tempo
O (log 2 N)
Nós não folha armazenam dados
O disco armazena menos elementos de nó e requer mais operações de E/S de disco.
A consulta precisa ser correspondida camada por camada e a consulta de intervalo precisa ser percorrida
Excluir nós fará com que a árvore seja reorganizada
Árvore B
complexidade de tempo
O(log3N)
3 graus
Nós não folha não armazenam dados
O disco armazena muitos elementos de nó, o que pode reduzir as operações de IO do disco. Uma operação de IO pode obter mais informações de índice.
Ao consultar dados, você só precisa consultar nós folha e manter ponteiros bidirecionais, organizados em uma lista vinculada, e oferecer suporte a consultas de intervalo.
Excluir o nó B não reorganizará a árvore.
Para evitar o rearranjo do índice da árvore B, o MySQL não excluirá os nós não-folha quando o índice for excluído, mas marcará os dados nos nós folha como inválidos. Quando mais e mais índices na tabela forem excluídos, um grande número. de índices serão gerados. Hole, informações de índice de nós não-folha podem ser encontradas, mas os dados em nós folha são inválidos.
Observe que o furo do índice é causado por isso. Como o índice é excluído continuamente, o índice tem um efeito de furo. A solução é reconstruir o índice (excluir o índice anterior e criar um novo índice).
Mecanismo de armazenamento MySQL
Mecanismo InnoDB
Versões posteriores ao MySQL 5.5 usam InnoDB por padrão. InnoDB é o mecanismo transacional padrão do MySQL. Ele foi projetado para lidar com um grande número de transações de curta duração. Pode garantir confirmação e reversão completas de transações
Índice de cluster (deve existir e há apenas um)
índice não clusterizado
Mecanismo de armazenamento MyISAM
O mecanismo de armazenamento padrão antes do MySQL5.5, MyISAM fornece um grande número de recursos, incluindo indexação de texto completo, compactação, funções espaciais (GIS), etc., mas MyISAM não suporta transações e bloqueios em nível de linha. que o MyISAM não pode recuperar com segurança.
Motor de arquivo (iluminação do amor)
Somente operações de inserção e operações de seleção podem ser executadas, o que é adequado para aplicativos de log e coleta de dados (arquivamento). As tabelas de arquivo são aproximadamente 75% menores que as tabelas MyISAM e aproximadamente 83% menores que as tabelas InnoDB que suportam processamento de transações.
Mecanismo de memória
Se você precisar acessar os dados rapidamente e os dados não forem modificados ou perdidos após a reinicialização, usar uma tabela de memória é muito útil. O mecanismo de memória é o mais rápido e adequado para armazenar dados temporários. Os dados são armazenados na memória. Quando o servidor é reiniciado, os dados são perdidos, mas a estrutura da tabela é mantida. oferece suporte a consultas de intervalo e não oferece suporte à classificação.
Ordem de execução SQL
de -> em -> ingressar -> onde -> agrupar por -> tendo -> selecionar -> distinto -> ordenar por -> limite
Lema: Buda me disse para trabalhar rápido.
Otimização de índice
Definição do índice:
Índice é uma estrutura de dados que ajuda o MySQL a obter dados de forma eficiente. A essência do índice é uma estrutura de dados, uma estrutura de dados classificada.
local de armazenamento
O índice do banco de dados é armazenado no disco. O InnoDB usa páginas como unidade básica ao ler dados do disco. O tamanho da página padrão do MySQL é 16 KB (16384K).
Vantagens e desvantagens da indexação
Vantagem
Melhore a eficiência da recuperação de dados e reduza os custos de IO
Reduza os custos de classificação de dados e reduza o consumo de CPU
Desvantagens
O índice é na verdade uma tabela que armazena a chave primária e os campos do índice e aponta para os registros da tabela de entidades, portanto as colunas do índice também ocupam espaço.
Embora os índices melhorem a velocidade da consulta, eles reduzem a velocidade de atualização da tabela.
Índice MySQL
Índice de cluster e índice não cluster
índice poli
gerar
Existe uma chave primária na tabela: Construa uma árvore B com base na chave primária da tabela
Não há chave primária na tabela
Se houver um índice exclusivo, use o primeiro índice exclusivo como índice de cluster
Não há chave primária nem índice exclusivo. Use o número da linha da tabela para construir um índice de cluster.
O índice de chave primária deve ser um índice de cluster. O índice de cluster não é necessariamente um índice de chave primária. Também pode ser um índice exclusivo e um índice de número de linha.
Características da estrutura em árvore: nós folha armazenam dados de registro de linha da tabela
Recursos de localização de dados: Encontre a chave do índice do cluster e, em seguida, leia os dados correspondentes no nó folha IO
Deve haver um índice clusterizado no MySQL, e existe apenas um. No entanto, atualmente apenas o InnoDB suporta índices clusterizados, e o MYISAM não.
Índice não clusterizado (índice secundário)
Geração: Além de serem índices clusterizados, outros índices são índices não clusterizados.
Características da estrutura em árvore: os nós folha armazenam as chaves do índice do cluster
Características da pesquisa de dados: Encontre a chave de índice não clusterizado, obtenha a chave de índice clusterizado correspondente e, em seguida, vá para a tabela de índice clusterizado para ler os dados correspondentes com base no IO da chave de índice clusterizado (retorno de tabela). a operação de retorno da tabela sempre. Um retorno à tabela pode ser uma operação IO.
Sintaxe relacionada ao índice
Criar índice
crie o nome do índice de índice (index_xxx) no nome da tabela (nome do campo)
Criar índice de prefixo
criar índice index_field nome_número de prefixos no nome da tabela (campo (número de prefixos))
Crie um índice sindical
criar índice index_field name 1_field name n no nome da tabela (nome do campo 1, nome do campo n)
Excluir índice
solte o nome do índice no nome da tabela
Índice da tabela de consulta
mostrar INDEX do nome da tabela
Classificação do índice
Índice de valor único
Crie um índice para um único campo
índice único
Certifique-se de que o valor de uma determinada coluna seja exclusivo e seja frequentemente usado para consultas. Ele pode ser usado como um índice exclusivo.
índice de chave primária
Quando o MySQL cria uma tabela, especificamos esse campo como a chave primária. O MySQL cria um índice para a chave primária por padrão. Se a chave primária não for especificada ao criar a tabela, o MySQL não criará um índice de chave primária. ser um índice implícito (usando o número da linha como índice)
Ambos podem ser usados como índices de cluster e o índice de chave primária pode ser usado como índice de cluster.
Índice composto (índice conjunto)
Use vários campos como índices. O uso adequado de índices conjuntos pode evitar consultas de retorno de tabela.
Princípio do prefixo mais à esquerda A coluna mais à esquerda deve existir, caso contrário o índice conjunto falhará
Ao usar um índice conjunto, se uma coluna for ignorada, os índices das colunas subsequentes serão inválidos.
Ao consultar um intervalo, o índice da coluna após maior ou menor será inválido. Tente usar maior ou igual a, ou menor que ou igual a.
Tente cobrir o índice
Tente colocar campos grandes na extremidade esquerda do índice conjunto
Classificação se o índice é criado ou não
Precisa criar índice
A chave primária cria automaticamente o índice de chave primária
Os campos consultados com frequência devem ser indexados
Os campos associados a outras tabelas na consulta e os campos usados como chaves estrangeiras precisam ser indexados
Campos para classificar
campos agrupados
Classifique primeiro e depois remova as duplicatas
Não há necessidade de criar índice
Poucos registros de tabela
Tabelas que são frequentemente adicionadas, excluídas ou modificadas
Campos não usados na consulta where
Princípios de design de índice
Crie índices para campos com grandes quantidades de dados e consultas frequentes
Para campos que são frequentemente usados como condições de consulta, como Agrupar por, onde, ordenar por
Se for um campo do tipo string e o comprimento do campo for longo, você poderá criar um índice de prefixo com base nas características da string.
Tente usar índices conjuntos e reduza o uso de índices singleton. Ao consultar, os índices conjuntos podem cobrir índices, economizar espaço em disco, evitar backs de tabela e melhorar a eficiência.
Controle o número de índices. Quanto mais índices, melhor. Os índices também ocuparão muito espaço em disco e levará muito tempo para manter o índice, o que afetará a eficiência de adições, exclusões e modificações.
Se o campo de índice não puder armazenar valores NULL, use NOT NULL para restringi-lo ao criar a tabela. Isso facilita a otimização pelo otimizador.
Não utilize * ao consultar os campos correspondentes de acordo com os campos obrigatórios.
Falha no índice
As operações de função são usadas em campos de índice, incluindo operações comuns, e o índice é inválido.
Os campos do tipo string não são colocados entre aspas simples, resultando em conversão implícita de tipo e falha de índice, o que equivale a adicionar uma função ao campo para conversão.
Ao realizar consultas difusas, se % for adicionado na frente, o índice também se tornará inválido.
Deve haver índices antes e depois da conexão ou. Se não houver índice em nenhum dos lados, o índice será inválido.
Impacto da distribuição de dados: Se o MySQL avaliar que uma varredura completa da tabela é mais rápida que um índice completo, o índice também se tornará inválido.
O índice conjunto após a consulta de intervalo será inválido < , > , !=
não é nulo causará falha no índice, é nulo pode usar o índice
Análise de otimização de índice
Otimizador otimizador
Plano de execução do ExplainView
gramática
Explique a instrução sql
Comparação de eficiência de agrupamento e classificação
O agrupamento precisa ser classificado primeiro e depois desduplicado, portanto a eficiência da classificação é alta, mas a eficiência do agrupamento é baixa.
Análise de resultados
EU IA
Um ID exclusivo que representa uma consulta
A execução de uma instrução SQL tem o mesmo ID de cima para baixo e IDs diferentes de grande para pequeno.
Como você pode ver na imagem, existem dois ids com o mesmo ID 2. Neste momento, a ordem de execução é de cima para baixo. Também existe um id com 1, primeiro maior e depois menor. com id 2 são executados, aquele com id 1 é executado.
As subconsultas levarão a várias consultas. Use menos subconsultas, se puder. O número de consultas reflete o número de IOs.
Existem vários IDs de seleção na instrução SQL. O valor máximo é o número. O mesmo valor de ID significa a mesma consulta.
selecione o tipo
Representa o tipo de consulta aqui
SIMPLES: Esta consulta é uma consulta simples, sem usar subconsultas ou uniões.
PRIMÁRIA: Esta consulta é uma consulta primária
SUBQUERY: Esta consulta é uma subconsulta
UNION: esta consulta usa UNION
DERIVADO: tabela derivada
mesa
Qual mesa está sendo operada neste momento?
partições
Partição
tipo
Representa como o MySQL usa esta tabela para consultar (conectar)
sistema
Esta consulta retorna os resultados diretamente (a consulta é informação do sistema MySQL) sem consultar o banco de dados.
const
Esta consulta foi consultada de uma só vez (lendo os dados do índice uma vez).
eq_ref
Os índices são usados para associar à tabela, e os campos associados da tabela principal podem pesquisar apenas um dado na tabela.
referência: referência
eq: equivalente
eq_ref: referência de valor igual; o uso de consulta conjunta de várias tabelas, os dados de A e B são exclusivamente relacionados;
referência
Representa uma referência com vários valores. São usados índices e associações de tabelas, e os campos associados da tabela principal podem pesquisar vários dados na tabela.
faixa
O campo de índice realiza consulta de intervalo
entre e
em (...)
>= e <=
índice
Uma varredura completa do índice significa que ele só precisa percorrer a árvore do índice.
O campo de seleção deve ser um índice (campo de índice sem cluster e campo de índice de cluster)
todos
Verificação completa da tabela
Desempenho da conexão (de alto a baixo)
sistema -> const -> eq_ref -> ref -> index_merge -> intervalo -> índice -> todos
chaves_possíveis
Campos que podem ser indexados
chave
Consulte o índice real usado
key_len
Comprimento real do índice usado, número de bytes
Fórmula de cálculo
interno
NULO permitido
4 1
NULO não é permitido
4
grande
NULO permitido
8 1
NULO não é permitido
8
caractere(n)
NULO permitido
3 * n 1
NULO não é permitido
3*n
varchar(n)
NULO permitido
3 * n 2 (variável reservada 2 bytes) 1
NULO não é permitido
3 * n 2
texto(n)
NULO permitido
3 * n 2 (variável reservada 2 bytes) 1
NULO não é permitido
3 * n 2
referência
Exibe o relacionamento de referência entre esta tabela e qual tabela e qual coluna Que tipo de relacionamento de referência pode ser determinado por tipo (ref, eq_ref)
linhas
Representa quantas linhas de registros nesta tabela foram operadas, quanto menos, melhor
filtrado
A porcentagem do número final de linhas de registro obtidas por meio das condições de consulta em relação ao número de linhas de registro pesquisadas por meio do método de pesquisa especificado pelo campo de tipo.
Extra
MySQL nos fornece outras informações de análise adicionais para esta consulta
Usando classificação de arquivos
Use a classificação de arquivos; os campos após a ordem por não são indexados ou há índices que não podem ser usados (neste caso, os campos classificados devem ser indexados)
Usando onde
Consultar com condição where
Usando temporário
Tabela temporária usada
Usando índice
Cobertura do índice
Você pode obter todos os dados usando apenas o índice, sem precisar voltar à tabela para verificar os dados reais (os campos no select são todos indexados e as condições são atendidas sem voltar à tabela para consultar)
O campo a ser consultado é a chave do índice não clusterizado e a chave do índice clusterizado.
Índice reverso para trás
Classifique os campos de índice em ordem decrescente
Usando condição de índice
Pushdown do índice:
Durante o processo de travessia do índice conjunto (índice secundário || índice de chave não primária), todos os campos incluídos no índice são julgados primeiro e os registros que não atendem às condições são filtrados antes de retornar à tabela, o que pode efetivamente reduzir o número de retornos de tabela.
Por exemplo, ao classificar campos de índice secundário de índices não agrupados, o pushdown de índice será usado.
Nota: o pushdown do índice é um novo recurso após a versão 5.6
impossível onde
mysql determina que a condição where deste sql não pode ser satisfeita
Por exemplo, onde id = 1 e id = 2, esta condição não pode ser satisfeita.
usando buffer de junção
Os campos relacionados não possuem índice. Se esse prompt aparecer, considere adicionar índices aos campos na consulta relacionada.
Otimização de SQL
inserir otimização de inserção em três aspectos
Ao inserir em lotes, use inserir valores no nome da tabela (), () não insira várias vezes sequencialmente, use o sql dinâmico do mybatis <foreach>
Use o envio manual de transações. Não envie a transação automaticamente sempre que um dado for inserido. A criação e o envio freqüentes de transações consomem desempenho.
As chaves primárias dos dados inseridos estão em ordem e a velocidade de inserção sequencial da chave primária é maior do que a velocidade de inserção fora de ordem da chave primária.
Otimização de chave primária
Fenômeno de duas páginas
divisão de página
Quando os dados na página de dados um e na página de dados dois estão cheios e uma chave primária precisa ser inserida fora de ordem no meio de uma das páginas, o innodb move os dados após 50% da página para a nova página . Na página de dados criada, insira a chave primária fora de ordem nela e coloque a página recém-criada entre a página de dados um e a página de dados dois e mantenha-a com uma lista duplamente vinculada. manter a validade dos nós folha.
Fenômeno de mesclagem de páginas
Quando os dados do índice são excluídos no innodb, os dados dos nós folha serão marcados como excluídos (para obter detalhes, consulte o problema do furo do índice. Quando os dados marcados como excluídos representam 50% dos dados nesta página, innodb). irá determinar se os dados nas páginas anteriores e seguintes podem ser mesclados para economizar espaço.
Três métodos para otimização de chave primária
O comprimento da chave primária não deve ser muito longo, o que ocupará espaço, gerará mais páginas e causará vários IOs.
Ao inserir a chave primária, mantenha-a em ordem e evite divisões de páginas.
Não use uuid ou outras chaves primárias naturais, como cartões de identificação
O UUID é aleatório, fazendo com que as chaves primárias fiquem fora de ordem e causando divisões de páginas.
O comprimento do UUID é muito longo e ocupa espaço
ordenar por otimização
Evite usar o filesort e prossiga usando o índice
Indexar o campo classificado
Ao classificar por ordem, é tabu usar sleect *. Consultar apenas os campos obrigatórios.
Classificação unidirecional e bidirecional
classificação unilateral
Consiste em retirar todos os campos das linhas que atendem à condição de uma vez e, em seguida, classificá-los no cache de classificação.
Rápido, ocupa espaço na memória
classificação bidirecional
Primeiro, retire o campo de classificação correspondente e o ID da linha que pode localizar diretamente os dados da linha de acordo com as condições correspondentes e, em seguida, classifique no cache de classificação. Após a classificação, você precisa retornar à tabela novamente para recuperar outros registros necessários;
Lento, economiza espaço de memória
agrupar por otimização
Os campos agrupados são indexados
Otimização de classificação e agrupamento
Sem filtragem, sem indexação
Quando não estiver usando where, você pode tentar adicionar limite
Ordem errada, deve ser classificada
Os campos do índice conjunto estão na ordem errada, portanto toda a tabela deve ser ordenada.
A direção é invertida e deve ser classificada.
As regras de classificação de campos da classificação de índice conjunto devem ser consistentes, todas em ordem crescente ou decrescente, caso contrário, toda a classificação da tabela deve ser usada
limitar a otimização da paginação
Otimize cobrindo índices e subconsultas e consultas de intervalo
Por exemplo, selecione * do limite t 1900000,10
método um
selecione id de t ordenar por limite de id 1900000,10
Primeiro consulte a chave primária dentro do intervalo de consulta, usando um índice de cobertura
selecione t.* de t , ( selecione id de t ordenar por limite de id 1900000,10 ) t1 onde t.id = t1.id
Em seguida, execute a consulta eq_ref de chave primária por meio de subconsulta
Método 2
selecione o id do limite t 1900000,1
Primeiro execute uma consulta const para obter o primeiro ID de chave primária no intervalo
selecione * de t, (selecione id de t limite 1900000,1) t1 onde t.id > t1.id LIMIT 0,10
Consultar a última página por const,range
otimização de contagem
O mecanismo MyISAM armazena o número total de linhas de uma tabela no disco, portanto, quando count(*) for executado, o número total de linhas será retornado diretamente.
O InnoDB precisa ler os dados do mecanismo e contá-los linha por linha. Se não for nulo, ele acumulará por linha e retornará o número cumulativo ou uma nova tabela. Ao executar a inserção novamente, use redis para aumentar o valor da contagem. em um. Ao excluir, diminua o valor em um.
contagem (chave primária)
O mecanismo InnoDB percorrerá toda a tabela, retirará a chave primária e a retornará à camada de serviço. Depois que a camada de serviço obtiver a chave primária, ela a acumulará por linha.
contagem (campo)
Não há restrição não nula
O mecanismo InnoDB percorrerá toda a tabela, retirará os campos e os retornará à camada de serviço. Depois que a camada de serviço obtiver a chave primária, ela julgará se ela é nula ou não e a acumulará por linha.
Não há restrição nula
O mecanismo InnoDB percorrerá toda a tabela, retirará os campos e os retornará à camada de serviço. Depois que a camada de serviço obtiver a chave primária, ela a acumulará por linha.
número de contagem)
O mecanismo InnoDB percorrerá a página inteira sem obter um valor. O servidor colocará um número correspondente em cada linha e o acumulará diretamente por linha.
count(*) O mecanismo InnoDB percorrerá a página inteira sem obter um valor. O servidor fez otimizações especiais e acumula dados diretamente por linha.
Os dois são os mais rápidos porque não exigem valor
Ao contar campos (não indexados e sem campos de restrição não nulos), preste atenção especial se é nulo ou não. Se for nulo, não será acumulado.
otimização de atualização
atualizar nome da tabela definir nome do campo = valor onde nome do campo (este campo deve ser indexado) = valor
O nome do campo de condição atualizado deve ser indexado, caso contrário, o bloqueio de linha será atualizado para um bloqueio de tabela.
Replicação mestre-escravo MySQL
Princípio de replicação mestre-escravo
O escravo inicia o thread para ler o log binlog (log binário) do mestre, copia-o para o log Readlog (relay log) e então o thread SQL lê o conteúdo do log Readlog.
Princípios básicos de replicação
Cada escravo só pode ter um mestre
Cada escravo só pode ter um ID de servidor exclusivo
Cada mestre pode ter vários escravos
Configuração de host
Modifique a configuração no arquivo de configuração principal my.cnf
Todos os itens de configuração do mestre e do escravo são configurados no nó [mysqld] e estão todos em letras minúsculas.
binlog_formato
DECLARAÇÃO (padrão)
nível de declaração
O Binlog registrará cada instrução que executa uma operação de gravação, o que economiza espaço em comparação ao modo ROW, mas pode causar problemas de inconsistência de dados.
Por exemplo, o host executa update tt set create_date=now(). Devido ao tempo de execução inconsistente do escravo, os dados são inconsistentes.
Vantagens: Economiza espaço
Desvantagens: Pode causar inconsistência de dados.
LINHA
nível de linha
O Binlog registrará as alterações em cada linha após cada operação.
Vantagens: Mantenha a consistência absoluta dos dados. Porque não importa qual seja o sql ou a que função ele se refere, ele só registra o efeito após a execução.
Desvantagens: ocupa muito espaço.
MISTURADO
A versão atualizada da instrução resolve até certo ponto o problema de inconsistência do modo de instrução causada por algumas situações.
Crie uma conta no host e autorize o escravo
conceda todos os privilégios em *.* para root@'%' identificado por 'root' # Crie um usuário root e autorize o acesso remoto!
privilégios de liberação anote os valores de arquivo e posição
Consultar o status do mestre: mostrar o status do mestre
Após executar esta etapa, não opere o servidor principal MYSQL novamente para evitar que o valor do status do servidor principal seja alterado.
Configuração escrava
Modifique a configuração no arquivo de configuração principal my.cnf
[Obrigatório] ID exclusivo do servidor escravo: server-id=2
[Opcional] Habilitar log de retransmissão: relay-log=mysql-relay
CHANGE MASTER TO MASTER_HOST='Endereço IP do host', MASTER_USER='X',MASTER_PASSWORD='X',
MUDAR MASTER PARA MASTER_HOST='mall_mysql_master',MASTER_PORT=3306,MASTER_USER='escravo',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=0;
MASTER_LOG_FILE='mysql-bin.Número específico',MASTER_LOG_POS=Valor específico;
Inicie a função de replicação do servidor
iniciar escravo;
Ver status
mostrar status do escravo\G;
Slave_IO_Running: Sim
lave_SQL_Running: Sim
A configuração de reinicialização mestre-escravo entra em vigor.
systemctl reiniciar mysqld
Desligue o firewall nas máquinas mestre e escrava
systemctl parar firewalld
Pare a função de replicação do serviço escravo e reconfigure o mestre e o escravo
Executado na máquina escrava. Descrição da função: Parar as operações do encadeamento de E/S e do encadeamento SQL
mysql>parar escravo;
Executado na máquina escrava. Descrição da função: Usado para excluir o arquivo de log de relaylog do banco de dados SLAVE e reativar o novo arquivo de relaylog.
mysql> redefinir escravo;
Executado no host. Descrição da função: Exclua todos os arquivos de log do binglog, limpe os arquivos de índice de log e reinicie todos os novos arquivos de log. É usado para inicializar o log binário da biblioteca principal ao construir a biblioteca mestre-escravo pela primeira vez;
mysql>redefinir mestre;