Eu criei uma tabela "global_settings" para armazenar diferentes configurações de aplicativos da web - aquelas que desejo poder editar na página html:
global_settings:
id primary key,
key varchar(100),
value varchar(1000),
extra_data jsonb
onde key
foi dada UNIQUE
a restrição.
Haverá, digamos, 100 configurações no máximo.
Porém, como já percebi, key
às vezes pode chegar a 100 caracteres ou mais. É porque quero deixar isso explicitamente claro.
Quanto espaço em disco adicional esses tipos de índices de chaves UNIQUE
longosVARCHAR
adicionam a um banco de dados, em média? O tamanho int64
é de 8 bytes, mas key
será ... mais de 10 vezes maior. Conseqüentemente, mais de 10 vezes mais espaço em disco. Correto?
Se eu tivesse milhares deles, o tamanho do banco de dados seria 10 vezes maior em comparação com uma situação em que havia key
um int64
?
Um
varchar
valor de 100 letras ASCII ocupa 101 bytes no disco. Umint8
(esse é o nome interno dobigint
Postgres, não) ocupa 8 bytes.int64
Então sim, mais de 12 vezes maior. Ou ainda maior com letras não ASCII que ocupam vários bytes. Mas isso pouco importa para apenas 100 linhas. Mesmo a existência de um índice pouco importa para uma tabela tão pequena.
Para milhares de linhas (ou milhões), sim, essa diferença de tamanho é importante. Para a mesa. Mas muito mais para o índice. Suas linhas são largas, portanto, 100 bytes representam apenas uma pequena porcentagem do tamanho total da linha. Mas o índice cresce até 10 vezes, o que é ruim para o desempenho.
Se você precisar de chaves tão longas, considere indexar um hash produzido com
md5()
ouhashtextextended()
. Ver: