Sugerowałbym przyjrzenie się rodzajom zapytań, które będziesz uruchamiać, aby zdecydować, jaki format zastosujesz.
Tylko jeśli musisz wyciągnąć lub porównać poszczególne oktety, musisz rozważyć podzielenie ich na osobne pola.
W przeciwnym razie zapisz go jako 4-bajtową liczbę całkowitą. Ma to również tę zaletę, że umożliwia korzystanie z wbudowanego w MySQL INET_ATON()
i INET_NTOA()
funkcje.
Wydajność a przestrzeń
Pamięć:
Jeśli zamierzasz obsługiwać tylko adresy IPv4, twoim typem danych w MySQL może być UNSIGNED INT
który wykorzystuje tylko 4 bajty pamięci.
Aby zapisać poszczególne oktety, wystarczy użyć UNSIGNED TINYINT
typy danych, a nie SMALLINTS
, co zużyłoby 1 bajt każdego miejsca na dane.
Obie metody wykorzystywałyby podobną pamięć, być może nieco więcej dla oddzielnych pól, z pewnym obciążeniem.
Więcej informacji:
- Omówienie typów liczbowych
- Typy całkowite (dokładna wartość) — INTEGER, INT , MAŁY, MAŁY, ŚREDNI, DUŻY
Wydajność:
Użycie pojedynczego pola zapewni znacznie lepszą wydajność, jest to pojedyncze porównanie zamiast 4. Wspomniałeś, że będziesz uruchamiać zapytania tylko dla całego adresu IP, więc nie powinno być potrzeby oddzielania oktetów. Korzystanie z INET_*
funkcje MySQL dokonają konwersji między reprezentacjami tekstowymi i liczbami całkowitymi raz w celu porównania.