Je vais créer une table avec deux champs - IDcomme BIGINTet IPAddresscomme varchar(45)ou varbinary(16). L'idée est de stocker toutes les adresses IP uniques et d'utiliser une référence à la IDplace de la réelle IP addressdans d'autres tableaux.
Généralement, je vais créer une procédure stockée qui renvoie le IDpour donné IP addressou (si l'adresse n'a pas été trouvée) insérer l'adresse et renvoyer le généré ID.
Je m'attends à avoir de nombreux enregistrements (je ne peux pas dire exactement combien), mais j'ai besoin que la procédure stockée ci-dessus soit exécutée le plus rapidement possible. Donc, je me demande comment stocker l'adresse IP réelle - au format texte ou octets. Qu'est-ce qui va être mieux?
J'ai déjà écrit des SQL CLRfonctions pour transformer les octets d'adresse IP en chaîne et inversement, donc la transformation n'est pas un problème (travailler avec les deux IPv4et IPv6).
Je suppose que je dois créer un index pour optimiser la recherche, mais je ne suis pas sûr de devoir inclure le IP addresschamp à l'index clusterisé, ou de créer un index séparé et avec quel type la recherche sera plus rapide?
IPv4je suppose que je convertirais l'adresse INTet utiliserais le champ comme clé d'index. Mais car IPv6j'ai besoin d'utiliser deux BIGINTchamps et je préfère stocker la valeur dans un champ - me semble plus naturel.