मैं आपको यह देखने का सुझाव दूंगा कि आप किस प्रारूप को अपनाते हैं, यह तय करने के लिए आप किस प्रकार के प्रश्नों को चला रहे हैं।
केवल अगर आपको अलग-अलग ऑक्टेट को बाहर निकालने या तुलना करने की आवश्यकता है, तो क्या आपको उन्हें अलग-अलग क्षेत्रों में विभाजित करने पर विचार करना होगा।
अन्यथा, इसे 4 बाइट पूर्णांक के रूप में संग्रहीत करें। इसमें आपको MySQL बिल्ट-इन INET_ATON()
और INET_NTOA()
कोड>
कार्य।
प्रदर्शन बनाम स्पेस
संग्रहण:
यदि आप केवल IPv4 पतों का समर्थन करने जा रहे हैं तो MySQL में आपका डेटाटाइप एक UNSIGNED INT
हो सकता है जो केवल 4 बाइट स्टोरेज का उपयोग करता है।
अलग-अलग ऑक्टेट को स्टोर करने के लिए आपको केवल UNSIGNED TINYINT
का उपयोग करना होगा डेटाटाइप, नहीं SMALLINTS
, जो प्रत्येक संग्रहण में 1 बाइट का उपयोग करेगा।
दोनों विधियों में कुछ ओवरहेड के लिए अलग-अलग फ़ील्ड के लिए शायद कुछ अधिक के साथ समान भंडारण का उपयोग किया जाएगा।
अधिक जानकारी:
- संख्यात्मक प्रकार का अवलोकन
- पूर्णांक प्रकार (सटीक मान) - INTEGER, INT , स्मॉलिंट, टिन्यिन्ट, मेडियमिंट, बिगिनट
प्रदर्शन:
एकल फ़ील्ड का उपयोग करने से बेहतर प्रदर्शन मिलेगा, यह 4 के बजाय एकल तुलना है। आपने उल्लेख किया है कि आप केवल पूरे आईपी पते के विरुद्ध क्वेरी चलाएंगे, इसलिए ऑक्टेट को अलग रखने की कोई आवश्यकता नहीं होनी चाहिए। INET_*
का उपयोग करना MySQL के कार्य तुलना के लिए एक बार पाठ और पूर्णांक अभ्यावेदन के बीच रूपांतरण करेंगे।