Tenho lido sobre o particionamento de tabelas no mariadb.
Eu sei que isso não proporcionará nenhum ganho direto de desempenho. Mas e as tabelas de índice? Eles também são particionados?
Digamos que uma tabela seja particionada, user_id
então todos os dados relacionados a um usuário estarão na mesma partição da tabela. Em uma sessão de usuário, cada consulta irá, portanto, buscar dados apenas de uma única partição de tabela
Minha pergunta é: as tabelas de índices também serão particionadas de acordo? Quando uma consulta é executada, ela pesquisa apenas na tabela de índices particionados e não em todos os índices = less para pesquisar
Pense desta forma... Uma tabela particionada é um conjunto de tabelas separadas, com base na chave de partição. Cada "subtabela" possui os dados da partição em um BTree, além de BTree separado para cada índice secundário. As subtabelas (partições) são independentes umas das outras. (Muitas vezes a compensação é uma lavagem.)
Caso 1: Se a "remoção de partição" decidir que apenas uma partição se aplica, então apenas uma subtabela será examinada. Nesse caso, há uma compensação entre escolher a partição e um pouco mais de trabalho em um único índice que pode ser necessário se a tabela não fosse particionada.
Caso 2: Se a remoção não se aplicar, então cada subtabela é pesquisada (através de um de seus índices, se apropriado) em busca da(s) linha(s) desejada(s). Em seguida, os resultados de cada subtabela são combinados (a la
UNION
). É provável que isso seja lento - devido à "abertura" de cada partição e à análise de um índice em cada uma. (O(Np) para procurar em todas as partições Np e, em seguida, O(log Nr) para detalhar cada um dos índices Np.Mais discussão: Partição
Sim, os índices " particionam " os dados de forma exponencial quando comparados ao particionamento regular que apenas divide os dados linearmente. Os índices têm uma complexidade de tempo de pesquisa de
O(log(n))
, o particionamento é deO(n)
. Os índices têm como objetivo melhorar o desempenho das consultas, e nem tanto o particionamento. Em vez disso, o particionamento destina-se a melhorar o gerenciamento de dados, como descartar apenas um subconjunto de dados que não é mais necessário por vez.Sim, desde que seu índice seja projetado adequadamente para a consulta para a qual está sendo usado e você esteja obtendo buscas de índice contra ele, será necessário pesquisar apenas a parte do índice relevante para sua consulta, de forma eficiente.