जैसा कि @Devart कहते हैं, आपकी अनुक्रमणिका की कुल लंबाई बहुत लंबी है।
संक्षिप्त उत्तर यह है कि आपको वैसे भी इतने लंबे VARCHAR स्तंभों को अनुक्रमणित नहीं करना चाहिए, क्योंकि अनुक्रमणिका बहुत भारी और अक्षम होगी।
सबसे अच्छा अभ्यास है उपसर्ग अनुक्रमणिका . का उपयोग करना तो आप केवल डेटा के बाएं सबस्ट्रिंग को अनुक्रमणित कर रहे हैं। आपका अधिकांश डेटा वैसे भी 255 वर्णों से बहुत छोटा होगा।
जैसे ही आप इंडेक्स को परिभाषित करते हैं, आप प्रति कॉलम उपसर्ग लंबाई घोषित कर सकते हैं। उदाहरण के लिए:
...
KEY `index` (`parent_menu_id`,`menu_link`(50),`plugin`(50),`alias`(50))
...
लेकिन किसी दिए गए कॉलम के लिए सबसे अच्छा उपसर्ग लंबाई क्या है? यह पता लगाने की एक विधि है:
SELECT
ROUND(SUM(LENGTH(`menu_link`)<10)*100/COUNT(`menu_link`),2) AS pct_length_10,
ROUND(SUM(LENGTH(`menu_link`)<20)*100/COUNT(`menu_link`),2) AS pct_length_20,
ROUND(SUM(LENGTH(`menu_link`)<50)*100/COUNT(`menu_link`),2) AS pct_length_50,
ROUND(SUM(LENGTH(`menu_link`)<100)*100/COUNT(`menu_link`),2) AS pct_length_100
FROM `pds_core_menu_items`;
यह आपको उन पंक्तियों का अनुपात बताता है जिनकी menu_link
में दी गई स्ट्रिंग लंबाई से अधिक नहीं है कॉलम। आप इस तरह आउटपुट देख सकते हैं:
+---------------+---------------+---------------+----------------+
| pct_length_10 | pct_length_20 | pct_length_50 | pct_length_100 |
+---------------+---------------+---------------+----------------+
| 21.78 | 80.20 | 100.00 | 100.00 |
+---------------+---------------+---------------+----------------+
यह आपको बताता है कि आपके 80% तार 20 वर्णों से कम हैं, और आपके सभी तार 50 वर्णों से कम हैं। इसलिए उपसर्ग की लंबाई 50 से अधिक अनुक्रमित करने की कोई आवश्यकता नहीं है, और निश्चित रूप से 255 वर्णों की पूर्ण लंबाई को अनुक्रमित करने की कोई आवश्यकता नहीं है।
पुनश्च:INT(1)
और INT(32)
डेटा प्रकार MySQL के बारे में एक और गलतफहमी को इंगित करता है। संख्यात्मक तर्क का भंडारण या स्तंभ के लिए अनुमत मानों की श्रेणी से कोई प्रभाव नहीं पड़ता है। INT
हमेशा 4 बाइट्स होता है, और यह हमेशा -2147483648 से 2147483647 तक के मानों की अनुमति देता है। संख्यात्मक तर्क प्रदर्शन के दौरान पैडिंग मानों के बारे में है, जिसका तब तक कोई प्रभाव नहीं पड़ता जब तक आप ZEROFILL
का उपयोग नहीं करते हैं। विकल्प।