- Ben iki alan içeren bir tablo oluşturmak için gidiyorum IDolarak BIGINTve IPAddresssıra ya varchar(45)ya varbinary(16). Fikir, tüm benzersiz IP adreslerini saklamak ve diğer tablolarda IDgerçek yerine bir referans kullanmaktır IP address.
Genellikle, IDverilen IP addressveya (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 CLRIP 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 IPv4ve ile çalışma IPv6).
Aramayı optimize etmek için bir dizin oluşturmam gerekiyor, ancak IP addressalanı kümelenmiş dizine dahil etmeli miyim , yoksa ayrı bir dizin oluşturmalı ve hangi türle arama daha hızlı olacak?
IPv4sanırım adresi dönüştürür INTve alanı indeks anahtarı olarak kullanırdım. Ama IPv6iki BIGINTalan kullanmam gerekiyor ve değeri bir alanda depolamayı tercih ediyorum - bana daha doğal geliyor.