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

जटिल क्वेरी को स्थानांतरित करने में बहुत अधिक समय लगता है

चौराहे की मेज पर आपको एक मिश्रित अनुक्रमणिका चाहिए:

ALTER TABLE instruments_tools ADD KEY (id_instrument, id_tool);

उस अनुक्रमणिका में स्तंभों का क्रम महत्वपूर्ण है!

आप जिस चीज की उम्मीद कर रहे हैं, वह यह है कि जॉइन इंस्ट्रूमेंट टेबल से शुरू होगा, फिर id_instrument के आधार पर कंपाउंड इंडेक्स में मैचिंग इंडेक्स एंट्री देखें। फिर एक बार जब उसे वह अनुक्रमणिका प्रविष्टि मिल जाती है, तो उसके पास संबंधित id_tool निःशुल्क होता है। इसलिए इसे इंस्ट्रूमेंट_टूल्स टेबल को बिल्कुल भी पढ़ने की जरूरत नहीं है, इसे केवल इंडेक्स एंट्री को पढ़ने की जरूरत है। इससे आपके EXPLAIN में tools_tools तालिका के लिए "इंडेक्स का उपयोग करना" टिप्पणी देनी चाहिए।

इससे मदद मिलनी चाहिए, लेकिन आप अस्थायी तालिका और फ़ाइल सॉर्ट से बच नहीं सकते हैं, क्योंकि जिन स्तंभों के आधार पर आप समूह बना रहे हैं और उनके आधार पर क्रमित कर रहे हैं, वे अनुक्रमणिका का उपयोग नहीं कर सकते हैं।

आप MySQL को अस्थायी तालिकाओं के लिए उपयोग की जा सकने वाली मेमोरी के आकार को बढ़ाकर डिस्क पर अस्थायी तालिका लिखने से बचने की कोशिश कर सकते हैं:

mysql> SET GLOBAL tmp_table_size = 256*1024*1024;      -- 256MB
mysql> SET GLOBAL max_heap_table_size = 256*1024*1024; -- 256MB

वह आंकड़ा तो एक उदाहरण मात्र है। मुझे नहीं पता कि आपके मामले में अस्थायी तालिका के लिए यह कितना बड़ा होगा।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. IN खंड में MySQL एकाधिक कॉलम

  2. PHP एकाधिक अद्यतन फ़ंक्शन अपडेट नहीं हो रहा है और पहली पंक्ति खाली हो जाती है

  3. मैं MySQL स्थानिक एक्सटेंशन का उपयोग करके त्रिज्या और केंद्र के समन्वय के साथ एक सर्कल ज्यामिति कैसे बना सकता हूं?

  4. MySql सेलेक्ट फॉर्मेट, राउंड कॉलम

  5. सभी रिकॉर्ड के लिए mysql क्वेरी आज नहीं