Tabelas MERGE são novas no MySQL Versão
      3.23.25. O código ainda está em gamma, mas deve estar
      razoavelmente estável.
    
      Uma tabela MERGE (também conhecida como tabela
      MRG_MyISAM) é uma coleção de tabelas
      MyISAM idênticas que podem ser usada como uma.
      Você só pode fazer SELECT,
      DELETE, e UPDATE da
      coleção de tabelas. Se você fizer um DROP na
      tabela MERGE, você só está apagando a
      especificação de MERGE.
    
      Note que DELETE FROM tabela_merge usado sem um
      WHERE só limpará o mapeamento a tabela, não
      deletando tudo nas tabeals mapeadas. (Planejamos consertar isto na
      versão 4.1).
    
      Com tabelas idênticas queremos dizer que todas as tabelas são
      criadas com informações de colunas e chaves idênticas. Você
      não pode fundir tabelas nas quais as colunas são empacotadas de
      forma diferente, não tenham as mesmas colunas ou tenham as chaves
      em ordem diferente. No entanto, algumas das tabelas podem ser
      compactadas com myisampack. See
      Secção 4.8.4, “myisampack, O Gerador de Tabelas Compactadas de
        Somente Leitura do MySQL”.
    
      Ao criar uma tabela MERGE, você obterá uma
      arquivo de definição de tabela .frm e um
      arquivo de lista de tabela .MRG. O arquivo
      .MRG contém apenas a lista de arquivos
      índices (arquivos .MYI) que devem ser usados
      como um. Antes da versão 4.1.1, todas as tabelas usadas devem
      estar no mesmo banco de dados assim como a própria tabela
      MERGE.
    
      Atualmente você precisa ter os privilégios
      SELECT, UPDATE e
      DELETE em tabelas mapeadas para uma tabela
      MERGE.
    
      Tabelas MERGE podem ajudá-lo a resolver os
      seguintes problemas:
    
          Facilidade de gernciamento de um conjunto de log de tabelas.
          Por exemplo, você pode colocar dados de meses diferentes em
          arquivos separadosfrom different months into separate files,
          compress some of them with myisampack, and
          then create a MERGE to use these as one.
        
          Lhe da maior velocidade. Você pode separar uma grande tabela
          somente leitura baseado em algum critério e então colocar as
          diferentes partes da tabela em discos diferentes. Uma tabela
          MERGE desta forma pode ser muito mais
          rápida que se usada em uma grande tabela. (Você pode, é
          claro, usar também um nível RAID para obter o memo tipo de
          benefício.)
        
          Faz pesquisas mais eficientes. Se você sabe exatamente o que
          você esta procurando, você pode buscar em apenas um dos
          pedaços da tabelas para algumas pesquisas e utilizar tabelas
          MERGE para outras. Você pode até ter
          diferentes tabelas MERGE ativas, com
          possíveis arquivos sobrepostos.
        
          Reparações mais eficientes. É facil reparar os arquivos
          individuais que são mapeados para um arquivo
          MERGE que tentar reparar um arquivo
          realmente grande.
        
          Mapeamento instantâneo de diversos arquivos como um. Uma
          tabela MERGE usa o índice de tabelas
          individuais. Não é necessário manter um índice de para
          ela. Isto torna a coleção de tabelas
          MERGE MUITO rápido de fazer ou remapear.
          Note que você deve especificar a definição de chave quando
          você cria uma tabela MERGE!.
        
          Se você tem um conjunto de tabelas que você junta a uma
          tabela grande por demanda ou bacth, você deveria criar uma
          tabela MERGE delas por demanda. Isto é
          muito mais rápido é economizará bastante espaço em disco.
        
Contornam o limite de tamanho de arquivos do sistema operacional.
          Você pode criar um apelido/sinônimo para uma tabela usando
          MERGE sobre uma tabela. Não deve haver
          nenhum impacto notável na performance ao se fazer isto
          (apenas algumas chamadas indiretas e chamadas de
          memcpy() para cada leitura).
        
      As desvantagens de tabelas MERGE são:
    
          Você só pode utilizar tabelas MyISAM
          idênticas em uma tabela MERGE.
        
          REPLACE não funciona.
        
          Tabelas MERGE usam mais descritores de
          arquivos. Se você estiver usando uma tabela
          MERGE que mapeia mais de 10 tabelas e 10
          usuários a estão usando, você está usando 10*10 + 10
          descritores de arquivos. (10 arquivos de dados para 10
          usuários e 10 arquivos de índices compartilhados).
        
          A leitura de chaves é lenta. Quando você faz uma leitura
          sobre uma chave, o mecanismo de armazenamento
          MERGE precisará fazer uma leitura em todas
          as tabelas para verificar qual casa melhor com a chave dada.
          Se você então fizer uma "leia próximo", o mecanismo de
          armazenamento MERGE precisará procurar os
          buffers de leitura para encontrar a próxima chave. Apenas
          quando um buffer de chaves é usado, o mecanismo de
          armazenamento precisará ler o próximo bloco de chaves. Isto
          torna as chaves MERGE mais lentas em
          pesquisas eq_ref, mas não em pesquisas
          ref. See Secção 5.2.1, “Sintaxe de EXPLAIN (Obter informações sobre uma
        SELECT)”.
        
          Você não pode fazer DROP TABLE,
          ALTER TABLE, DELETE FROM
          nome_tabela sem uma cláusula
          WHERE, REPAIR TABLE,
          TRUNCATE TABLE, OPTIMIZE
          TABLE, ou ANALYZE TABLE em
          nenhuma das tabelas que é mapeada por uma tabela
          MERGE que está "aberta". Se você fizer
          isto, a tabela MERGE pode ainda se referir
          a tabela original e você obterá resultados inexperados. O
          modo mais fácil de contornar esta deficiência e através do
          comando FLUSH TABLES, assegurando que
          nenhuma tabela MERGE permanecerá "aberta".
        
      Quando você cria uma tabela MERGE você deve
      especificar com UNION=(lista-de-tabelas) quais
      tabelas você quer usar com uma. Opcionalmente você pode
      especificar com INSERT_METHOD se você quer que
      inserções em tabelas MERGE ocorram na
      primeira ou na última tabela da lista UNION.
      Se você não especificar INSERT_METHOD ou
      especificar NO, entaão todos os comandos
      INSERT na tabela MERGE
      retornarão um erro.
    
      O seguinte exemplo lhe mostra como utilizaqr tabelas
      MERGE:
    
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20));
CREATE TABLE t2 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20));
INSERT INTO t1 (message) VALUES ("Testing"),("table"),("t1");
INSERT INTO t2 (message) VALUES ("Testing"),("table"),("t2");
CREATE TABLE total (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20))
             TYPE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;
SELECT * FROM total;
      Note que não criamos uma chave UNIQUE ou
      PRIMARY KEY na tabela total
      já que a chave não será única na tabela
      total.
    
      Note que você também pode manipular o arquivo
      .MRG diretamente de fora do servidor MySQL:
    
shell>cd /mysql-data-directory/current-databaseshell>ls -1 t1.MYI t2.MYI > total.MRGshell>mysqladmin flush-tables
Agora você pode fazer coisas como:
mysql> SELECT * FROM total;
+---+---------+
| a | message |
+---+---------+
| 1 | Testing |
| 2 | table   |
| 3 | t1      |
| 1 | Testing |
| 2 | table   |
| 3 | t2      |
+---+---------+
      Note que a coluna a, declarada como
      PRIMARY KEY, não é unica, já que tabelas
      MERGE não podem forca a unicidade sobre um
      conjunto de tabelas MyISAM selecionadas.
    
      Para remapear uma tabela MERGE você pode fazer
      o seguinte:
    
          Fazer um DROP na tabela e recriá-la
        
          Usar ALTER TABLE nome_tabela UNION=(...)
        
          Alterar o arquivo .MRG e executar um
          FLUSH TABLE na tabela
          MERGE e todas as tabelas selecionadas para
          forçar o mecanismo de armazenamento a ler o novo arquivo de
          definição.
        
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

