Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

क्या आईपी + सीआईडीआर के साथ आईपी से सीधे चयन क्वेरी से मिलान करने का कोई तरीका है?

याद रखें कि आईपी एक टेक्स्ट एड्रेस नहीं है, बल्कि एक संख्यात्मक आईडी है। मेरे पास एक समान स्थिति है (हम भू-आईपी लुकअप कर रहे हैं), और यदि आप अपने सभी आईपी पते को पूर्णांक के रूप में संग्रहीत करते हैं (उदाहरण के लिए, मेरा आईपी पता 192.115.22.33 है तो इसे 3228767777 के रूप में संग्रहीत किया जाता है), तो आप आईपी देख सकते हैं सही शिफ्ट ऑपरेटरों का उपयोग करके आसानी से।

इन सभी प्रकार के लुकअप का नकारात्मक पक्ष यह है कि आप इंडेक्स से लाभ नहीं उठा सकते हैं और जब भी आप लुकअप करते हैं तो आपको एक पूर्ण टेबल स्कैन करना पड़ता है। उपरोक्त योजना को सीआईडीआर नेटवर्क के नेटवर्क आईपी पते (रेंज की शुरुआत) और प्रसारण पता (रेंज का अंत) दोनों को स्टोर करके बेहतर बनाया जा सकता है, इसलिए उदाहरण के लिए 192.168.1.0/24 स्टोर करने के लिए आप दो स्टोर कर सकते हैं कॉलम:

network     broadcast
3232235776, 3232236031 

और फिर आप इसका मिलान कर सकते हैं आप बस करते हैं

SELECT count(*) FROM bans WHERE 3232235876 >= network AND 3232235876 <= broadcast

यह आपको डेटाबेस में CIDR नेटवर्क को स्टोर करने देता है और त्वरित संख्यात्मक अनुक्रमणिका का लाभ उठाकर जल्दी और कुशलता से IP पतों के साथ उनका मिलान करता है।

नीचे दी गई चर्चा से नोट करें :

MySQL 5.0 में एक श्रेणीबद्ध क्वेरी अनुकूलन शामिल है जिसे "इंडेक्स मर्ज इंटरसेक्ट " जो इस तरह के प्रश्नों को तेज करने की अनुमति देता है (और पूर्ण तालिका स्कैन से बचता है), जब तक:

  • एक बहु-स्तंभ अनुक्रमणिका है जो क्रम में क्वेरी के स्तंभों से बिल्कुल मेल खाती है। तो - उपरोक्त क्वेरी उदाहरण के लिए, अनुक्रमणिका को (network, broadcast) होना चाहिए ।
  • सभी डेटा को अनुक्रमणिका से पुनर्प्राप्त किया जा सकता है। यह COUNT(*) . के लिए सही है , लेकिन SELECT * ... LIMIT 1 . के लिए सही नहीं है ।

MySQL 5.6 में MRR नामक एक अनुकूलन शामिल है जो पूर्ण पंक्ति पुनर्प्राप्ति को भी गति देगा, लेकिन यह इस उत्तर के दायरे से बाहर है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL में POSITION () फ़ंक्शन कैसे काम करता है

  2. डेटाबेस पर मीडिया फ़ाइलों को संग्रहीत करने का सबसे अच्छा तरीका क्या है?

  3. 'कोड' से पहले तालिका जोड़ें ... बदलें?

  4. IP पते के लिए किस MySQL डेटाटाइप का उपयोग करना है?

  5. पायथन के MySQLdb के लिए संदर्भ प्रबंधक