Suggerirei di esaminare il tipo di query che eseguirai per decidere quale formato adottare.
Solo se hai bisogno di estrarre o confrontare singoli ottetti, dovresti considerare di dividerli in campi separati.
In caso contrario, salvalo come numero intero di 4 byte. Questo ha anche il vantaggio di permetterti di usare il MySQL integrato INET_ATON()
e INET_NTOA()
funzioni.
Prestazioni vs. Spazio
Archiviazione:
Se intendi supportare solo indirizzi IPv4, il tuo tipo di dati in MySQL può essere un UNSIGNED INT
che utilizza solo 4 byte di memoria.
Per memorizzare i singoli ottetti è sufficiente utilizzare UNSIGNED TINYINT
tipi di dati, non SMALLINTS
, che consumerebbe 1 byte ciascuno di spazio di archiviazione.
Entrambi i metodi userebbero un'archiviazione simile con forse un po' di più per campi separati per un po' di sovraccarico.
Maggiori informazioni:
- Panoramica del tipo numerico
- Tipi interi (valore esatto) - INTEGER, INT , SMALLINT, TINYINT, MEDIUMINT, BIGINT
Rendimento:
L'uso di un singolo campo produrrà prestazioni molto migliori, è un singolo confronto invece di 4. Hai detto che eseguirai query solo sull'intero indirizzo IP, quindi non dovrebbe essere necessario mantenere separati gli ottetti. Utilizzando INET_*
le funzioni di MySQL eseguiranno la conversione tra il testo e le rappresentazioni intere una volta per il confronto.