Tenho um banco de dados com tamanho de cerca de 170GB com linhas entre 20.000 - 700.000.000 linhas (dependendo da tabela). Atualmente estou usando o mecanismo de armazenamento MyISAM.
No meu caso, a velocidade de consulta (READ) é muito importante, mas a transacional é opcional.
Minhas estimativas de operação CRUD são:
- 98% LER
- 2% INSERIR
- < 1% para ATUALIZAR e EXCLUIR
Sua única escolha real aqui é entre
InnoDB
os motores PerconaXtraDB
- veja esta página .Coincidentemente, escrevi uma resposta para Alterar toda a tabela ENGINE de uma só vez de "MyISAM" para "InnoDB" no MySql com uma única consulta esta manhã sobre como converter de
MyISAM
paraInnoDB
qual pode ser do seu interesse? Há razões muito boas para não ir com nada não transacional!Sim - para seus recursos transacionais - você recebe DRI (
Declarative Referential Integrity
). Aplicar DRI no lado do aplicativo é um desastre esperando para acontecer - enquanto que se você usa o RDBMS, você tem um sistema que foi testado por literalmente milhões de pessoas. Se você "roll-your-own", terá que reescrevê-lo toda vez que quiser escrever um novo aplicativo para esse esquema específico - e se seus dados forem importantes, isso acontecerá ! Eu recomendo que você use o InnoDB ou o XtraDB, mas se você insistir em um NTE, vá com o Aria! - VeraceInnoDB, ponto final, ponto final. Um cuidado: o espaço em disco aumentará entre 2x e 3x.
Isso discute as várias coisas que você precisa observar: http://mysql.rjweb.org/doc.php/myisam2innodb . E fornece o desejado
ALTERs
.Altere as configurações. O mais importante é diminuir
key_buffer_size
e aumentarinnodb_buffer_pool_size
. (Veja meu link.)"Velocidade de leitura" -- A Oracle tem "provado" nos últimos lançamentos que o InnoDB é mais rápido. Por causa do "clustering" do PK no InnoDB, pode ser melhor fazer algumas alterações nos índices (primário e secundário).