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