Ik raad je aan te kijken naar wat voor soort zoekopdrachten je gaat uitvoeren om te beslissen welk formaat je gebruikt.
Alleen als u afzonderlijke octetten wilt verwijderen of vergelijken, moet u overwegen ze op te splitsen in afzonderlijke velden.
Sla het anders op als een geheel getal van 4 bytes. Dat heeft ook de bonus dat u de MySQL-ingebouwde INET_ATON()
en INET_NTOA()
functies.
Prestaties versus ruimte
Opslag:
Als u alleen IPv4-adressen gaat ondersteunen, kan uw datatype in MySQL een UNSIGNED INT
zijn die slechts 4 bytes aan opslagruimte gebruikt.
Om de afzonderlijke octetten op te slaan, hoeft u alleen UNSIGNED TINYINT
te gebruiken datatypes, niet SMALLINTS
, wat elk 1 byte aan opslagruimte zou verbruiken.
Beide methoden zouden vergelijkbare opslag gebruiken met misschien iets meer voor afzonderlijke velden voor wat overhead.
Meer info:
- Overzicht numeriek type
- Integer-typen (exacte waarde) - INTEGER, INT , SMALLINT, TINYINT, MEDIUMINT, GROOT
Prestaties:
Het gebruik van een enkel veld zal veel betere prestaties opleveren, het is een enkele vergelijking in plaats van 4. U zei dat u alleen query's uitvoert op het hele IP-adres, dus het zou niet nodig moeten zijn om de octetten gescheiden te houden. De INET_*
. gebruiken functies van MySQL zullen de conversie tussen de tekst en integer-representaties eenmaal uitvoeren voor de vergelijking.