Tôi sẽ tạo ra một bảng với hai lĩnh vực - IDnhư BIGINTvà IPAddresslà một trong hai varchar(45)hoặc varbinary(16). Ý tưởng là lưu trữ tất cả các địa chỉ IP duy nhất và sử dụng tham chiếu IDthay vì thực tế IP addresstrong các bảng khác.
Nói chung, tôi sẽ tạo một thủ tục được lưu trữ đang trả về đã IDcho IP addresshoặc (nếu không tìm thấy địa chỉ) chèn địa chỉ và trả lại địa chỉ đã tạo ID.
Tôi hy vọng sẽ có nhiều hồ sơ (tôi không thể biết chính xác có bao nhiêu), nhưng tôi cần thủ tục được lưu trữ ở trên để được thực thi nhanh nhất có thể. Vì vậy, tôi tự hỏi làm thế nào để lưu trữ địa chỉ IP thực tế - ở định dạng văn bản hoặc byte. Cái nào sẽ tốt hơn?
Tôi đã viết các SQL CLRhàm để chuyển đổi byte địa chỉ IP thành chuỗi và ngược lại, vì vậy chuyển đổi không phải là vấn đề (làm việc với cả hai IPv4và IPv6).
Tôi đoán tôi cần tạo một chỉ mục để tối ưu hóa tìm kiếm, nhưng tôi không chắc mình nên đưa IP addresstrường vào chỉ mục được nhóm hay để tạo một chỉ mục riêng và loại tìm kiếm nào sẽ nhanh hơn?
IPv4tôi đoán tôi sẽ chuyển đổi địa chỉ thành INTvà sử dụng trường làm khóa chỉ mục. Nhưng đối với IPv6tôi cần sử dụng hai BIGINTtrường và tôi thích lưu trữ giá trị trong một trường - đối với tôi tự nhiên hơn.