Motores de armazenamento são componentes MySQL que lidam com as operações SQL para diferentes tipos de tabelas. InnoDB
é o motor de armazenamento padrão e de uso mais geral, e a Oracle recomenda seu uso para tabelas, exceto para casos de uso especializado. (A instrução CREATE TABLE
no MySQL 8.0 cria InnoDB
tabelas por padrão.)
MySQL Server usa uma arquitetura de mecanismo de armazenamento plugável que permite que os mecanismos de armazenamento sejam carregados e descarregados de um servidor MySQL em execução.
Para determinar quais mecanismos de armazenamento o seu servidor suporta, use a instrução SHOW ENGINES
. O valor na coluna Support
indica se um mecanismo pode ser usado. Um valor de YES
, NO
, ou DEFAULT
indica que um motor está disponível, não disponível, ou disponível e actualmente definido como o motor de armazenamento predefinido.
mysql> SHOW ENGINES\G*************************** 1. row *************************** Engine: PERFORMANCE_SCHEMA Support: YES Comment: Performance SchemaTransactions: NO XA: NO Savepoints: NO*************************** 2. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level locking, and foreign keysTransactions: YES XA: YES Savepoints: YES*************************** 3. row *************************** Engine: MRG_MYISAM Support: YES Comment: Collection of identical MyISAM tablesTransactions: NO XA: NO Savepoints: NO*************************** 4. row *************************** Engine: BLACKHOLE Support: YES Comment: /dev/null storage engine (anything you write to it disappears)Transactions: NO XA: NO Savepoints: NO*************************** 5. row *************************** Engine: MyISAM Support: YES Comment: MyISAM storage engineTransactions: NO XA: NO Savepoints: NO...
Este capítulo cobre os casos de utilização para motores de armazenamento MySQL para fins especiais. Ele não cobre o motor de armazenamento padrão InnoDB
ou o motor de armazenamento NDB
que são cobertos no Capítulo 15, O motor de armazenamento InnoDB e Capítulo 23, MySQL NDB Cluster 8.0. Para usuários avançados, ele também contém uma descrição da arquitetura do mecanismo de armazenamento plugável (veja a Seção 16.11, “Visão geral da arquitetura do mecanismo de armazenamento MySQL”).
Para informações sobre os recursos oferecidos nos binários comerciais do MySQL Server, veja MySQL Editions, no website MySQL. Os mecanismos de armazenamento disponíveis podem depender de qual edição do MySQL você está usando.
Para respostas a perguntas comuns sobre motores de armazenamento MySQL, veja Seção A.2, “FAQ do MySQL 8.0″: Motores de armazenamento”.
Motores de armazenamento suportados pelo MySQL 8.0
-
InnoDB
: O motor de armazenamento padrão no MySQL 8.0.InnoDB
é um mecanismo de armazenamento seguro para transações (compatível com ACID) para MySQL que possui recursos de commit, rollback e crash-recovery para proteger os dados do usuário.InnoDB
bloqueio a nível de linha (sem escalonamento para bloqueios de granularidade mais grosseiros) e leituras consistentes de não bloqueio estilo Oracle aumentam a simultaneidade e o desempenho de multi-usuário.InnoDB
armazena dados de usuários em índices agrupados para reduzir E/S para consultas comuns baseadas em chaves primárias. Para manter a integridade dos dados,InnoDB
também suportaFOREIGN KEY
restrições de integração referencial. Para obter mais informações sobreInnoDB
, consulte o Capítulo 15, O Motor de Armazenamento InnoDB. -
MyISAM
: Estas tabelas têm uma pequena pegada. O travamento em nível de tabela limita o desempenho em cargas de trabalho de leitura/escrita, por isso é freqüentemente usado em cargas de trabalho somente leitura ou principalmente de leitura em configurações de Web e armazenamento de dados. -
Memory
: Armazena todos os dados na RAM, para acesso rápido em ambientes que requerem consultas rápidas de dados não críticos. Este motor era anteriormente conhecido como o motorHEAP
. Seus casos de uso estão diminuindo;InnoDB
com sua área de memória buffer pool fornece uma maneira geral e durável de manter a maioria ou todos os dados na memória, eNDBCLUSTER
fornece buscas rápidas de valor chave para grandes conjuntos de dados distribuídos. -
CSV
: Suas tabelas são realmente arquivos de texto com valores separados por vírgula. As tabelas CSV permitem importar ou descarregar dados em formato CSV, para trocar dados com scripts e aplicações que lêem e escrevem nesse mesmo formato. Como as tabelas CSV não são indexadas, você normalmente mantém os dados emInnoDB
tabelas durante a operação normal, e só usa tabelas CSV durante a etapa de importação ou exportação. -
Archive
: Estas tabelas compactas e não indexadas destinam-se ao armazenamento e recuperação de grandes quantidades de informação de auditoria histórica, arquivada ou de segurança raramente referenciada. -
Blackhole
: O motor de armazenamento Blackhole aceita mas não armazena dados, semelhante ao dispositivo Unix/dev/null
. As consultas sempre retornam um conjunto vazio. Estas tabelas podem ser usadas em configurações de replicação onde declarações DML são enviadas para servidores replicados, mas o servidor fonte não mantém a sua própria cópia dos dados. -
NDB
(também conhecido comoNDBCLUSTER
): Este motor de base de dados em cluster é particularmente adequado para aplicações que requerem o mais alto grau de disponibilidade e tempo de funcionamento possível. -
Merge
: Permite a um MySQL DBA ou desenvolvedor agrupar logicamente uma série de tabelas idênticasMyISAM
e referenciá-las como um único objeto. Bom para ambientes VLDB, tais como data warehousing. -
Federated
: Oferece a capacidade de ligar servidores MySQL separados para criar uma base de dados lógica a partir de muitos servidores físicos. Muito bom para ambientes distribuídos ou de data mart. -
Example
: Este motor serve como exemplo no código fonte MySQL que ilustra como começar a escrever novos motores de armazenamento. É principalmente de interesse para os desenvolvedores. O motor de armazenamento é um “stub” que não faz nada. Você pode criar tabelas com este motor, mas nenhum dado pode ser armazenado nelas ou recuperado delas.
Você não está restrito a usar o mesmo motor de armazenamento para um servidor ou esquema inteiro. Você pode especificar o motor de armazenamento para qualquer tabela. Por exemplo, uma aplicação pode utilizar principalmente InnoDB
tabelas, com uma CSV
tabela para exportar dados para uma folha de cálculo e algumas MEMORY
tabelas para espaços de trabalho temporários.
Escolhendo um motor de armazenamento
Os vários motores de armazenamento fornecidos com o MySQL são desenhados com diferentes casos de utilização em mente. A tabela a seguir fornece uma visão geral de alguns mecanismos de armazenamento fornecidos com o MySQL, com notas explicativas seguindo a tabela.
Tabela 16.1 Motores de armazenamento Resumo das características
Função | MyISAM | Memória | InnoDB | Arquivo | NDB | |
---|---|---|---|---|---|---|
B-índices de árvore | Sim | Sim | Sim | Não | Não | Não |
Backup/point-in-tempo de recuperação (nota 1) | Sim | Sim | Sim | Sim | Sim | Sim |
Suporte de base de dados cluster | Não | Não | Não | Não | Sim | |
Índices agrupados | Não | Não | Sim | Não | Não | |
Dados comprimidos | Sim (nota 2) | Não | Sim | Sim | Não | |
Caches de dados | Não | N/A | Sim | Não | Sim | |
Dados encriptados | Sim (nota 3) | Sim (nota 3) | Sim (nota 4) | Sim (nota 3) | Sim (nota 3) | |
Suporte de chave externa | Não | Não | Sim | Não | Sim (nota 5) | |
Totall-índices de pesquisa de texto | Sim | Não | Sim (nota 6) | Não | Não | Não |
Geospatial tipo de dados suporte | Sim | Não | Sim | Sim | Sim | Sim |
Indice geoespacial suporte | Sim | Não | Sim (nota 7) | Não | Não | Não |
Índices de hash | Não | Sim | Não (nota 8) | Não | Sim | |
Caches de índice | Sim | N/A | Sim | Não | Sim | |
Granularidade de bloqueio | Tabela | Tabela | Linha | Row | Row | |
MVCC | Não | Não | Sim | Não | Não | |
Suporte de réplica (nota 1) | Sim | Limitado (nota 9) | Sim | Sim | Sim | |
Limites de armazenamento | 256TB | RAM | 64TB | Nenhum | 384EB | |
T-índices de árvore | Não | Não | Não | Não | Não | Sim |
Transações | Não | Não | Sim | Não | Não | Sim |
Atualizar estatísticas para o dicionário de dados | Sim | Sim | Sim | Sim | Sim | Sim |
Notas:
1. Implementado no servidor, e não no motor de armazenamento.
2. As tabelas MyISAM comprimidas são suportadas apenas quando se utiliza o formato de linha comprimida. Tabelas usando o formato de linha comprimida com MyISAM são apenas lidas.
3. Implementado no servidor através de funções de encriptação.
4. Implementado no servidor através de funções de encriptação; No MySQL 5.7 e posteriores, a encriptação de dados em repouso é suportada.
5. Suporte para chaves estrangeiras está disponível no MySQL Cluster NDB 7.3 e posteriores.
6. Suporte para índices FULLTEXT está disponível no MySQL 5.6 e posteriores.
7. Suporte para indexação geoespacial está disponível no MySQL 5.7 e posteriores.
8. InnoDB utiliza índices hash internamente para sua característica Adaptive Hash Index.
9. Veja a discussão mais tarde nesta seção.