Voy a crear una tabla con dos campos: IDcomo BIGINTy IPAddresscomo varchar(45)o varbinary(16). La idea es almacenar todas las direcciones IP únicas y utilizar una referencia en IDlugar de la real IP addressen otras tablas.
En general, voy a crear un procedimiento almacenado que devuelve el IDdado IP addresso (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 CLRfunciones 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 IPv4y IPv6).
Supongo que necesito crear un índice para optimizar la búsqueda, pero no estoy seguro de si debería incluir el IP addresscampo 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 INTy usaría el campo como clave de índice. Pero porque IPv6necesito usar dos BIGINTcampos y prefiero almacenar el valor en un campo, me parece más natural.