Ho intenzione di creare una tabella con due campi - ID
come BIGINT
e IPAddress
come uno varchar(45)
o varbinary(16)
. L'idea è di memorizzare tutti gli indirizzi IP univoci e utilizzare un riferimento ID
anziché l'attuale IP address
in altre tabelle.
Generalmente, ho intenzione di creare una procedura memorizzata che sta restituendo il ID
dato IP address
o (se l'indirizzo non è stato trovato) inserisco l'indirizzo e restituisce il generato ID
.
Mi aspetto di avere molti record (non posso dire esattamente quanti), ma ho bisogno che la procedura memorizzata sopra sia eseguita il più velocemente possibile. Quindi, mi chiedo come memorizzare l'indirizzo IP effettivo, in formato testo o byte. Quale sarà migliore?
Ho già scritto SQL CLR
funzioni per trasformare i byte dell'indirizzo IP in stringa e viceversa, quindi la trasformazione non è un problema (lavorare con entrambi IPv4
e IPv6
).
Immagino di dover creare un indice per ottimizzare la ricerca, ma non sono sicuro di dover includere il IP address
campo nell'indice cluster o di creare un indice separato e con quale tipo la ricerca sarà più veloce?
IPv4
suppongo che convertissi l'indirizzo INT
e usassi il campo come chiave indice. Ma perché IPv6
ho bisogno di usare due BIGINT
campi e preferisco memorizzare il valore in un campo - mi sembra più naturale.