No começo, antes da versão 5.1, quando ainda não tínhamos o “innodb-file-per-table” todas as tabelas eram criadas, e, armazenadas dentro de uma única tablespace, chamada de  “shared tablespace”, em português “área compartilhada de tabelas”, ou ainda, em “brasileiro”: casa da mãe Joana. Os famosos arquivos IBDATAx. Uma baderna. Dados, índices, metadados, transações, catálogos… Enfim, tudo referente às tabelas innodb ficam em um mesmo arquivão no S/O.

Pró: Contiguidade. Alocava-se um grande espaço justaposto no disco evitando-se fragmentação física. Contras: Performance, manutenção, etc. No frigir dos ovos, era muito ruim.

Com o nascimento do 5.1 e seu novo parâmetro maroto “innodb-file-per-table”, que como diz a tradução ao pé da letra: dançou mané – agora é uma área (tablespace/arquivo) para cada tabela. Resolveu sim os problemas de manutenção. Em alguns casos, até de performance, em virtude da melhor alocação dos dados no Buffer Pool (buffer cache). Mas, também, chegou com muitos outros problemas: aumentou muito o número de arquivos no S/O, e, com isso a necessidade de “ponteiros”, com isso, tivemos que rever as configurações de memória.

Desde a versão 5.6, criou-se um meio termo. Algo mais consonante com os demais RDBMS que temos no mercado. Portanto, pode-se criar tablespaces, e, alocar determinadas tabelas nessa tablespace. Ainda não está perfeito, e, não houve melhorias na versão 5.7, mas, já é uma avanço.

Vamos à “comandeira”, afinal, a gente quer mesmo é saber dos comandos!

No imagem a seguir, criaremos uma tablespace de nome myTS1. O arquivo físico no S/O que representa esta tablespace é o myTS1.ibd. Nota: adicionem o .idb, até a versão 5.7.17 o comando, ainda, é idiotinha. Se suprimir o “.ibd” resultará em erro.

Após a criação da tablespace myTS1. Adicionei 3 tabelas. Sendo que 2 delas, eu criei dentro da tablespace myTS1, e, a última, fora desta tablespace.

No file System ficou assim:

A tablespace é criada na raiz do datadir, visto que não especifiquei nenhum caminho. As tabelas tab1 e tab2, criadas dentro da tablespace, tiveram seus .frm criados dentro do subdiretório que representa o meu banco de dados, neste caso: teste. Já a tabela tab3, criada fora da tablespace teve seus arquivos: .frm e.ibd criados em ../teste. Completando: Os dados e índices de tab1 e tab2 serão persistidos dentro da tablespace myTS1.