Ich werde eine Tabelle mit zwei Feldern erstellen - IDals BIGINTund IPAddressals entweder varchar(45)oder varbinary(16). Die Idee ist, alle eindeutigen IP-Adressen zu speichern und IDstattdessen eine Referenz zu verwenden, die IP addressin anderen Tabellen tatsächlich ist .
Im Allgemeinen werde ich eine gespeicherte Prozedur erstellen, die die IDangegebene zurückgibt IP addressoder (falls die Adresse nicht gefunden wurde) die Adresse einfügt und die generierte zurückgibt ID.
Ich erwarte viele Datensätze (ich kann nicht genau sagen, wie viele), aber ich muss die oben gespeicherte Prozedur so schnell wie möglich ausführen. Ich frage mich also, wie ich die tatsächliche IP-Adresse speichern soll - im Text- oder Byte-Format. Welches wird besser?
Ich habe bereits SQL CLRFunktionen zum Transformieren von IP-Adressbytes in Zeichenfolgen und umgekehrt geschrieben, sodass die Transformation kein Problem darstellt (Arbeiten mit beiden IPv4und IPv6).
Ich denke, ich muss einen Index erstellen, um die Suche zu optimieren, aber ich bin nicht sicher, ob ich das IP addressFeld in den Clustered-Index aufnehmen oder einen separaten Index erstellen soll und mit welchem Typ die Suche schneller sein wird.
IPv4wäre, würde ich die Adresse in konvertieren INTund das Feld als Indexschlüssel verwenden. Aber denn IPv6ich muss zwei BIGINTFelder verwenden und ich bevorzuge es, den Wert in einem Feld zu speichern - scheint mir natürlicher.