Sugiro analisar que tipo de consultas você executará para decidir qual formato adotar.
Somente se você precisar extrair ou comparar octetos individuais, você deve considerar dividi-los em campos separados.
Caso contrário, armazene-o como um inteiro de 4 bytes. Isso também tem o bônus de permitir que você use o MySQL integrado
INET_ATON()
e INET_NTOA()
funções. Desempenho x espaço
Armazenamento:
Se você vai suportar apenas endereços IPv4, seu tipo de dados no MySQL pode ser um
UNSIGNED INT
que usa apenas 4 bytes de armazenamento. Para armazenar os octetos individuais, você só precisa usar
UNSIGNED TINYINT
tipos de dados, não SMALLINTS
, que usaria até 1 byte cada de armazenamento. Ambos os métodos usariam armazenamento semelhante com talvez um pouco mais para campos separados para alguma sobrecarga.
Mais informações:
- Visão geral do tipo numérico
- Tipos de inteiros (valor exato) - INTEGER, INT , SMALLINT, TINYINT, MEDIUMINT, BIGINT
Desempenho:
Usar um único campo produzirá um desempenho muito melhor, é uma comparação única em vez de 4. Você mencionou que só executará consultas em todo o endereço IP, portanto, não deve haver necessidade de manter os octetos separados. Usando o
INET_*
As funções do MySQL farão a conversão entre as representações de texto e inteiro uma vez para a comparação.