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

#1071 - निर्दिष्ट कुंजी बहुत लंबी थी; अधिकतम कुंजी लंबाई 1000 बाइट्स है

जैसा कि @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 का उपयोग नहीं करते हैं। विकल्प।



  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 डेटाबेस का बैकअप कैसे लें

  2. रैनसमवेयर अभियानों से MySQL डेटाबेस को कैसे सुरक्षित रखें

  3. MySQL में टास्क मैनेजर के लिए डेटाबेस डिजाइन करने के लिए गाइड

  4. MySQL ऑटोइनक्रिकमेंट कॉलम 10 से कूदता है- क्यों?

  5. MySQL डेटाबेस से छवियों को कैसे पुनर्प्राप्त करें और एक HTML टैग में प्रदर्शित करें