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

मैं MySQL ऑप्टिमाइज़र को किसी व्युत्पन्न तालिका पर अनुक्रमणिका का उपयोग करने के लिए कैसे कहूँ?

इसका एक समाधान MySQL सर्वर 5.6 - पूर्वावलोकन रिलीज़ (इस लेखन के समय) में है।

http://dev.mysql.com /doc/refman/5.6/hi/from-clause-subquery-optimization.html

हालांकि, मुझे यकीन नहीं है कि MySQL ऑप्टिमाइज़र उन इंडेक्स का फिर से उपयोग करेगा जो पहले से मौजूद हैं जब यह "व्युत्पन्न तालिका में इंडेक्स जोड़ता है"

निम्नलिखित प्रश्न पर विचार करें:

चुनें * t1JOIN से (चुनें * t2 से) AS व्युत्पन्न_t2 ON t1.f1=व्युत्पन्न_t2.f1;

दस्तावेज़ीकरण कहता है:"ऑप्टिमाइज़र व्युत्पन्न_t2 से कॉलम f1 पर एक इंडेक्स बनाता है यदि ऐसा करने से न्यूनतम लागत निष्पादन योजना के लिए रेफरी एक्सेस के उपयोग की अनुमति मिल जाएगी।"

ठीक है, यह बहुत अच्छा है, लेकिन क्या ऑप्टिमाइज़र t2 से अनुक्रमणिका का पुन:उपयोग करता है? दूसरे शब्दों में, क्या होगा यदि t2.f1 के लिए कोई अनुक्रमणिका मौजूद हो? क्या इस अनुक्रमणिका का पुन:उपयोग किया जाता है, या क्या अनुकूलक इस अनुक्रमणिका को व्युत्पन्न तालिका के लिए पुन:बनाता है? कौन जानता है?

संपादित करें: MySQL 5.6 तक का सबसे अच्छा समाधान एक अस्थायी तालिका बनाना, उस तालिका पर एक अनुक्रमणिका बनाना और फिर अस्थायी तालिका पर चयन क्वेरी चलाना है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mamp पोर्ट को 80 और 3306 पर सेट करना

  2. MS SQL सर्वर से MySQL में BLOB डेटा माइग्रेट करना

  3. सी # MySQL में बहुत सारे कनेक्शन

  4. Python3 mysqlclient-1.3.6 (उर्फ PyMySQL) उपयोग?

  5. MATLAB 7.0 और MYSQL का कनेक्शन