- मैं दो क्षेत्रों के साथ एक तालिका बनाने के लिए जा रहा हूँ ID
के रूप में BIGINT
और IPAddress
के रूप में या तो varchar(45)
या varbinary(16)
। विचार सभी अद्वितीय आईपी पते को संग्रहीत करने और अन्य तालिकाओं में ID
वास्तविक के बजाय एक संदर्भ का उपयोग करने के लिए है IP address
।
आम तौर पर, मैं एक संग्रहीत प्रक्रिया बनाने जा रहा हूं जो ID
दिए गए IP address
या (यदि पता नहीं मिला) के लिए रिटर्न दे रहा है तो पता डालें और उत्पन्न वापस करें ID
।
मैं कई रिकॉर्ड्स की उम्मीद कर रहा हूं (मैं वास्तव में कितने बता सकता हूं), लेकिन मुझे जितनी जल्दी हो सके निष्पादित करने के लिए ऊपर संग्रहीत प्रक्रिया की आवश्यकता है। इसलिए, मैं सोच रहा हूं कि वास्तविक आईपी पते को कैसे संग्रहीत किया जाए - पाठ या बाइट्स प्रारूप में। कौन सा बेहतर होने जा रहा है?
मैं पहले से ही लिखा है SQL CLR
आईपी पते बदलने के लिए कार्य स्ट्रिंग और रिवर्स करने के लिए बाइट्स, तो परिवर्तन एक मुद्दा (दोनों के साथ काम नहीं कर रहा है IPv4
और IPv6
)।
मुझे लगता है कि मुझे खोज को अनुकूलित करने के लिए एक इंडेक्स बनाने की आवश्यकता है, लेकिन मुझे यकीन नहीं है कि मुझे IP address
फ़ील्ड को क्लस्टर इंडेक्स में शामिल करना चाहिए , या एक अलग इंडेक्स बनाने के लिए और किस प्रकार की खोज तेज़ होगी?
IPv4
मेरे लिए था तो मुझे लगता है कि मैं पते को INT
क्षेत्र कुंजी के रूप में उपयोग और परिवर्तित करूंगा । लेकिन IPv6
मुझे दो BIGINT
क्षेत्रों का उपयोग करने की आवश्यकता है और मैं एक क्षेत्र में मूल्य संग्रहीत करना पसंद करता हूं - मुझे अधिक प्राकृतिक लगता है।