Vou criar uma tabela com dois campos - IDcomo BIGINTe IPAddresscomo ou varchar(45)ou varbinary(16). A idéia é armazenar todos os endereços IP exclusivos e usar uma referência em IDvez do real IP addressem outras tabelas.
Geralmente, eu vou criar um procedimento armazenado que está retornando o IDdado IP addressou (se o endereço não foi encontrado) insira o endereço e retorne o gerado ID.
Espero ter muitos registros (não sei exatamente quantos), mas preciso que o procedimento armazenado acima seja executado o mais rápido possível. Então, eu estou querendo saber como armazenar o endereço IP real - no formato de texto ou bytes. Qual vai ser melhor?
Eu já escrevi SQL CLRfunções para transformar bytes de endereços IP em string e o inverso, portanto, a transformação não é um problema (trabalhando com ambos IPv4e IPv6).
Acho que preciso criar um índice para otimizar a pesquisa, mas não tenho certeza se devo incluir o IP addresscampo no índice clusterizado ou criar um índice separado e com qual tipo a pesquisa será mais rápida?
IPv4acho que eu converteria o endereço INTe usaria o campo como chave de índice. Mas, como IPv6preciso usar dois BIGINTcampos e prefiro armazenar o valor em um campo - me parece mais natural.