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

MySQL वही क्वेरी करता है जो 10000xFetch समय प्राप्त किए बिना इंडेक्स सेकेंड के साथ है?

OR UPPER(lu.opis) LIKE UPPER('%SomeName%')

3 प्रदर्शन समस्याएं हैं:

  • OR खराब अनुकूलित है। अनिवार्य रूप से, सभी पंक्तियों की जांच के लिए तालिका को स्कैन किया जाना चाहिए। अनुक्रमणिका के मदद करने की संभावना नहीं है।
  • UPPER(indexed-column) उस कॉलम पर एक इंडेक्स का उपयोग करने से रोकता है। यह आसानी से उस कॉलम को COLLATION . घोषित करने के लिए काम किया जाता है वह "केस असंवेदनशील" है -- यानी, utf8_unicode_ci . जैसा कुछ; _ci पर ध्यान दें ।
  • LIKE '%... अग्रणी . के कारण अनुक्रमणिका का उपयोग नहीं कर सकते वाइल्डकार्ड।

इसके अलावा, आमतौर पर ऐसा होना मूर्खता है

32497 row(s) returned

आप इतनी सारी पंक्तियों का क्या करने जा रहे हैं? नेटवर्क स्थानांतरण समय महत्वपूर्ण होगा, भले ही क्वेरी स्वयं न हो।

LIKE . को "हल" करने के लिए , OR , और UPPER एक ही बार में सभी समस्याओं के लिए, पाठ को एक ही तालिका में एक कॉलम में एकत्रित करें। फिर एक FULLTEXT . प्रदान करें उस कॉलम पर index. द, MATCH ... AGAINST ... बहुत तेजी से चलेगा -- कम से कम SomeName . करने के लिए तलाशी। (LEFT JOINs एक और मामला है।)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डॉकर-कंपोज़ स्टार्टअप पर डेटाबेस बनाएं

  2. java.sql.SQLException:jdbc के लिए कोई उपयुक्त ड्राइवर नहीं मिला:mysql:// localhost:3306/dbname

  3. माई एसक्यूएल। सेल्फ जॉइन का उपयोग कैसे करें

  4. अनेक-से-अनेक संबंध INSERT

  5. MySQL विशाल टेबल जॉइन डेटाबेस को ध्वस्त कर देता है