Saya akan membuat tabel dengan dua bidang - IDsebagai BIGINTdan IPAddresssebagai varchar(45)atau varbinary(16). Idenya adalah untuk menyimpan semua alamat IP unik dan menggunakan referensi IDbukan yang sebenarnya IP addressdi tabel lain.
Secara umum, saya akan membuat prosedur tersimpan yang mengembalikan yang IDdiberikan IP addressatau (jika alamat tidak ditemukan) masukkan alamat dan kembalikan yang dihasilkan ID.
Saya berharap memiliki banyak catatan (saya tidak tahu persis berapa banyak), tetapi saya perlu prosedur tersimpan di atas untuk dieksekusi secepat mungkin. Jadi, saya bertanya-tanya bagaimana cara menyimpan alamat IP yang sebenarnya - dalam format teks atau byte. Mana yang lebih baik?
Saya sudah menulis SQL CLRfungsi untuk mengubah byte alamat IP menjadi string dan sebaliknya, jadi transformasi bukanlah masalah (bekerja dengan keduanya IPv4dan IPv6).
Saya kira saya perlu membuat indeks untuk mengoptimalkan pencarian, tetapi saya tidak yakin apakah saya harus memasukkan IP addressbidang ke indeks berkerumun, atau untuk membuat indeks terpisah dan dengan jenis pencarian yang akan lebih cepat?
IPv4saya kira saya akan mengkonversi alamat INTdan menggunakan bidang sebagai kunci indeks. Tetapi untuk IPv6saya perlu menggunakan dua BIGINTbidang dan saya lebih suka menyimpan nilai dalam satu bidang - bagi saya lebih alami.