sql >> Database >  >> RDS >> Mysql

Hoe een IP op te slaan in mySQL

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:

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.



  1. Epoch-tijdstempel converteren naar sql-server (menselijk leesbaar formaat)

  2. Importeer meerdere CSV-bestanden naar SQL Server vanuit een map

  3. Hoe cascade aan te houden met behulp van JPA/EclipseLink

  4. Hoe de dichtstbijzijnde locatie te vinden met behulp van de lengte- en breedtegraad uit de SQL-database?