- Ben iki alan içeren bir tablo oluşturmak için gidiyorum ID
olarak BIGINT
ve IPAddress
sıra ya varchar(45)
ya varbinary(16)
. Fikir, tüm benzersiz IP adreslerini saklamak ve diğer tablolarda ID
gerçek yerine bir referans kullanmaktır IP address
.
Genellikle, ID
verilen IP address
veya (adres bulunmadıysa) dönen bir saklı yordam oluşturacağım adresi girin ve oluşturulan döndürür ID
.
Birçok kayıt (tam olarak ne kadar söyleyemem) olmasını bekliyorum, ancak mümkün olduğunca hızlı yürütülmesi için yukarıdaki saklı yordam gerekir. Yani, gerçek IP adresini nasıl metin veya bayt biçiminde saklayacağımı merak ediyorum. Hangisi daha iyi olacak?
Zaten SQL CLR
IP adres baytları dize ve ters dönüştürmek için fonksiyonları yazdım , bu yüzden dönüşüm bir sorun değil (hem IPv4
ve ile çalışma IPv6
).
Aramayı optimize etmek için bir dizin oluşturmam gerekiyor, ancak IP address
alanı kümelenmiş dizine dahil etmeli miyim , yoksa ayrı bir dizin oluşturmalı ve hangi türle arama daha hızlı olacak?
IPv4
sanırım adresi dönüştürür INT
ve alanı indeks anahtarı olarak kullanırdım. Ama IPv6
iki BIGINT
alan kullanmam gerekiyor ve değeri bir alanda depolamayı tercih ediyorum - bana daha doğal geliyor.