Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

penalidade de desempenho de strings como chaves primárias?


O banco de dados precisa manter uma B-Tree (ou uma estrutura semelhante) com a chave de forma a tê-los ordenados.

Se a chave tiver hash e for armazenada na B-Tree, seria bom verificar rapidamente a singularidade da chave -- a chave ainda pode ser pesquisada com eficiência. Mas você não poderá pesquisar com eficiência por intervalo de dados (por exemplo, com LIKE ) porque o B-Tree não é mais ordenado de acordo com o valor String.

Então eu acho que a maioria dos bancos de dados realmente armazena a String na B-Tree, que pode (1) ocupar mais espaço do que valores numéricos e (2) exigem que o B-Tree seja rebalanceado se as chaves forem inseridas em ordem arbitrária (sem noção de valor crescente como com pk numérico).

A penalidade na prática pode variar de insignificante a enorme. Tudo depende do uso, do número de linhas, do tamanho médio da chave de string, das consultas que unem a tabela, etc.