Voy a crear una tabla con dos campos: ID
como BIGINT
y IPAddress
como varchar(45)
o varbinary(16)
. La idea es almacenar todas las direcciones IP únicas y utilizar una referencia en ID
lugar de la real IP address
en otras tablas.
En general, voy a crear un procedimiento almacenado que devuelve el ID
dado IP address
o (si no se encontró la dirección) insertar la dirección y devolver la generada ID
.
Espero tener muchos registros (no puedo decir exactamente cuántos), pero necesito que el procedimiento almacenado anterior se ejecute lo más rápido posible. Entonces, me pregunto cómo almacenar la dirección IP real, en formato de texto o bytes. ¿Cuál va a ser mejor?
Ya he escrito SQL CLR
funciones para transformar los bytes de la dirección IP en cadena y viceversa, por lo que la transformación no es un problema (trabajar con ambos IPv4
y IPv6
).
Supongo que necesito crear un índice para optimizar la búsqueda, pero no estoy seguro de si debería incluir el IP address
campo en el índice agrupado, o crear un índice separado y con qué tipo la búsqueda será más rápida.
IPv4
, supongo que convertiría la dirección INT
y usaría el campo como clave de índice. Pero porque IPv6
necesito usar dos BIGINT
campos y prefiero almacenar el valor en un campo, me parece más natural.