Mecanismo de armazenamento MySQL MyISAM

Resumo : neste tutorial, você aprenderá sobre o mecanismo de armazenamento MySQL MyISAM e seus recursos.

Introdução ao mecanismo de armazenamento MySQL MyISAM

MyISAM é um mecanismo de armazenamento baseado em um mecanismo de armazenamento ISAM (Indexed Sequential Access Method) obsoleto.

MyISAM é um mecanismo leve, não transacional e de alto desempenho. Também é fácil copiar entre sistemas e ocupa um espaço de dados muito pequeno.

MyISAM era o mecanismo de armazenamento padrão no MySQL até a versão 5.5, quando o MySQL o mudou para InnoDB. O MySQL também incorporou os principais recursos do MyISAM no InnoDB , tornando o MyISAM um tanto obsoleto.

Para criar uma tabela MyISAM, você usa a cláusula ENGINE da instrução CREATE TABLE para MyISAM:

CREATE TABLE table_name(
   ... 
) ENGINE=MYISAM;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Ao criar uma tabela MyISAM, o mecanismo de armazenamento gera dois arquivos com o mesmo nome da tabela, cada um com as seguintes extensões:

  • .MYD– MyData é o arquivo de dados.
  • .MYI– MyIndex é o arquivo de índice.

O mecanismo de armazenamento armazena a definição da tabela no dicionário de dados MySQL.

O mecanismo de armazenamento MyISAM não suporta transações, chaves estrangeiras e bloqueio de linha. Além disso, o limite de armazenamento de uma tabela MyISAM é 256 TB.

O mecanismo de armazenamento MyISAM oferece suporte a índices de pesquisa de texto completo , tipo de dados geoespaciais e indexação.

Convertendo MyISAM para InnoDB

Se quiser converter todas as suas tabelas de MyISAM para InnoDB, você pode seguir estas etapas:

Primeiro, liste todas as tabelas MyISAM de um banco de dados específico:

SELECT 
  table_name 
FROM 
  information_schema.tables 
WHERE 
  table_schema = 'database_name' 
  AND engine = 'MyISAM';Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Segundo, converta cada tabela para InnoDB usando a ALTER TABLEinstrução:

ALTER TABLE table_name ENGINE = InnoDB;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Se você precisar converter todas as tabelas MyISAM em um banco de dados para InnoDB, você pode usar o seguinte procedimento armazenado:

DELIMITER //
CREATE PROCEDURE ConvertMyISAMToInnoDB(IN dbName VARCHAR(100))
BEGIN
  DECLARE done INT DEFAULT FALSE;
  DECLARE tableName VARCHAR(100);
  DECLARE cur CURSOR FOR
    SELECT table_name
    FROM information_schema.tables
    WHERE table_schema = dbName AND engine = 'MyISAM';

  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

  OPEN cur;

  read_loop: LOOP
    FETCH cur INTO tableName;
    IF done THEN
      LEAVE read_loop;
    END IF;

    SET @alterSql = CONCAT('ALTER TABLE `', dbName, '`.`', tableName, '` ENGINE=InnoDB;');
    PREPARE stmt FROM @alterSql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
  END LOOP;

  CLOSE cur;
END //
DELIMITER ;
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

O procedimento armazenado ConvertMyISAMToInnoDBaceita um nome de banco de dados ( dbName) como parâmetro e faz o seguinte

  • Primeiro, use um cursor para percorrer a lista de tabelas no banco de dados especificado ( dbName) onde o tipo de mecanismo é MyISAM
  • Segundo, atualize cada tabela para InnoDB usando SQL dinâmico.

Por exemplo, para converter todas as tabelas MyISAM no banco de dados HR em tabelas InnoDB, você chama o procedimento armazenado ConvertMyISAMToInnoDBassim:

CALL ConvertMyISAMToInnoDB('HR');Linguagem de código:  JavaScript  ( javascript )

Resumo

  • Use o mecanismo de armazenamento MyISAM para cargas de trabalho com uso intenso de leitura e aplicativos que exigem recursos de pesquisa de texto completo.
  • O mecanismo de armazenamento MyISAM não oferece suporte a alguns recursos importantes, como transações e chaves estrangeiras, que são essenciais para a integridade dos dados em muitos aplicativos.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *