ฉันจะสร้างตารางที่มีสองช่อง - IDเป็นBIGINTและIPAddressเป็นอย่างใดอย่างหนึ่งหรือvarchar(45) varbinary(16)แนวคิดคือการจัดเก็บที่อยู่ IP ที่ไม่ซ้ำกันทั้งหมดและใช้การอ้างอิงIDแทนจริงIP addressในตารางอื่น ๆ
โดยทั่วไปฉันจะสร้างการจัดเก็บที่กลับมาIDสำหรับการรับIP addressหรือ (ถ้าอยู่ไม่พบ) IDแทรกอยู่และกลับที่สร้างขึ้น
ฉันคาดหวังว่าจะมีบันทึกจำนวนมาก (ฉันไม่สามารถบอกได้อย่างชัดเจนว่ามีจำนวนเท่าใด) แต่ฉันต้องการขั้นตอนการจัดเก็บด้านบนเพื่อดำเนินการโดยเร็วที่สุด ดังนั้นฉันจึงสงสัยว่าจะเก็บที่อยู่ IP จริงไว้อย่างไรในรูปแบบข้อความหรือไบต์ อันไหนจะดีกว่ากัน?
ฉันได้เขียนSQL CLRฟังก์ชันสำหรับแปลงที่อยู่ IP เป็นสตริงและย้อนกลับดังนั้นการแปลงจึงไม่ใช่ปัญหา (ทำงานกับทั้งสองIPv4และIPv6)
ฉันเดาว่าฉันต้องสร้างดัชนีเพื่อปรับการค้นหาให้เหมาะสม แต่ฉันไม่แน่ใจว่าฉันควรรวมIP addressฟิลด์ไว้ในดัชนีกลุ่มหรือเพื่อสร้างดัชนีแยกต่างหากและการค้นหาประเภทใดจะเร็วขึ้น
IPv4ฉันเดาฉันจะแปลงที่อยู่INTและใช้ฟิลด์เป็นคีย์ดัชนี แต่สำหรับIPv6ฉันต้องใช้สองBIGINTเขตข้อมูลและฉันต้องการเก็บค่าไว้ในเขตข้อมูลเดียว - ดูเหมือนว่าฉันจะเป็นธรรมชาติมากขึ้น