Ho intenzione di creare una tabella con due campi - IDcome BIGINTe IPAddresscome uno varchar(45)o varbinary(16). L'idea è di memorizzare tutti gli indirizzi IP univoci e utilizzare un riferimento IDanziché l'attuale IP addressin altre tabelle.
Generalmente, ho intenzione di creare una procedura memorizzata che sta restituendo il IDdato IP addresso (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 CLRfunzioni per trasformare i byte dell'indirizzo IP in stringa e viceversa, quindi la trasformazione non è un problema (lavorare con entrambi IPv4e IPv6).
Immagino di dover creare un indice per ottimizzare la ricerca, ma non sono sicuro di dover includere il IP addresscampo nell'indice cluster o di creare un indice separato e con quale tipo la ricerca sarà più veloce?
IPv4suppongo che convertissi l'indirizzo INTe usassi il campo come chiave indice. Ma perché IPv6ho bisogno di usare due BIGINTcampi e preferisco memorizzare il valore in un campo - mi sembra più naturale.