Jeg vil foreslå, at du ser på, hvilken type forespørgsler du vil køre for at beslutte, hvilket format du bruger.
Kun hvis du har brug for at trække ud eller sammenligne individuelle oktetter, skal du overveje at dele dem op i separate felter.
Ellers skal du gemme det som et 4 byte heltal. Det har også den bonus, at du kan bruge den indbyggede MySQL INET_ATON()
og INET_NTOA()
funktioner.
Ydeevne vs. plads
Lagring:
Hvis du kun skal understøtte IPv4-adresser, kan din datatype i MySQL være en UNSIGNED INT
som kun bruger 4 bytes lagerplads.
For at gemme de individuelle oktetter behøver du kun at bruge UNSIGNED TINYINT
datatyper, ikke SMALLINTS
, som ville bruge op til 1 byte hver af lagerplads.
Begge metoder ville bruge lignende lagring med måske lidt mere til separate felter for nogle overhead.
Mere info:
- Oversigt over numerisk type
- Heltalstyper (nøjagtig værdi) - INTEGER, INT , SMALLINT, TINYINT, MEDIUMINT, BIGINT
Ydeevne:
Brug af et enkelt felt vil give meget bedre ydeevne, det er en enkelt sammenligning i stedet for 4. Du nævnte, at du kun vil køre forespørgsler mod hele IP-adressen, så der skulle ikke være behov for at holde oktetterne adskilt. Ved hjælp af INET_*
funktionerne i MySQL udfører konverteringen mellem tekst- og heltalsrepræsentationerne én gang til sammenligningen.