[+/-]
O MySQL armazena suas informações de dicionários de dados de
tabelas em arquivos .frm
no diretório de
banco de dados. Mas todo tabela do tipo InnoDB também tem sua
própria entrada no dicionários de dados interno do InnoDB
dentro da tablespace. Quando o MySQL apaga uma tabela ou um
banco de dados, ele tem que deletar o(s) arquivo(s)
.frm
e a entrada correspondente dentro do
dicionário de dados do InnoDB. Esta é a razão pela qual você
não pode mover tabelas InnoDB entre banco de dados simplesmente
movendo os arquivos .frm
e porque
DROP DATABASE
não funcionava em tabelas do
tipo InnoDB em versÕes do MySQL anteriores a 3.23.43.
Toda tabela InnoDB tem um índice especial chamado de índice
agrupado onde os dados dos registros são armazenados. Se você
definir um chave primaria (PRIMARY KEY
) na
sua tabela, então o índice da chave primária será o índice
agrupado.
Se você não definir uma chave primária para a sua tabela, o InnoDB irá gerar internamente um índice agrupado qonde as linhas são ordenadas pela ID da linha que o InnoDB atribui as linhas nestas tabelas. O ID da linha é um campo de 6 bytes que cresce quando novas linhas são inseridas. Assim as linhas armazenadas pela sua ID estarão fisicamente na ordem de inserção.
Acessar uma linha pelo índice agrupado é rápido porque os dados do registro estarão na mesma página que a busca de índice nos indicar. Em muitos bancos de dados, os dados são armazenados em página diferente daquela em que se encontra os registros de índices, Se uma tabela é grande, a arquitetura do índice agrupado geralmente economiza E/S de disco se coparado a solução tradicional.
O registro em índices não agrupados (também os chamamos de índices secundários) em InnoDB contém o valor da chave primária para a linha. O InnoDB usa este valor de chave primária para buscar o registro do índice agrupado. Note que se a chave primária for grande, os índices secundários irão utilizar ainda mais espaç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.