Navrhoval bych podívat se na to, jaký typ dotazů budete spouštět, abyste se rozhodli, který formát přijmete.
Pouze pokud potřebujete vytáhnout nebo porovnat jednotlivé oktety, budete muset zvážit jejich rozdělení do samostatných polí.
V opačném případě jej uložte jako 4bajtové celé číslo. To má také bonus, že vám umožňuje používat vestavěný MySQL INET_ATON()
a INET_NTOA()
funkce.
Výkon vs. prostor
Úložiště:
Pokud budete podporovat pouze adresy IPv4, pak vaším datovým typem v MySQL může být UNSIGNED INT
který využívá pouze 4 bajty úložiště.
K uložení jednotlivých oktetů byste museli použít pouze UNSIGNED TINYINT
datové typy, nikoli SMALLINTS
, což by zabralo 1 bajt každého úložiště.
Obě metody by využívaly podobné úložiště s možná trochu větším množstvím samostatných polí pro určitou režii.
Více informací:
- Přehled číselných typů
- Typy celých čísel (přesná hodnota) – INTEGER, INT , SMALLINT, TINYINT, MEDIUMINT, BIGINT
Výkon:
Použití jednoho pole přinese mnohem lepší výkon, je to jediné srovnání místo 4. Zmínil jste, že budete spouštět dotazy pouze na celou IP adresu, takže by nemělo být potřeba držet oktety odděleně. Pomocí INET_*
funkce MySQL provedou převod mezi textovou a celočíselnou reprezentací jednou pro porovnání.