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

इंडेक्स बनाने के बाद MySQL क्वेरी धीमी है

क्या एक ही price . के साथ इतनी सारी पंक्तियां होना यथार्थवादी है? ? क्या किसी क्वेरी से 444K पंक्तियों को वापस करना यथार्थवादी है? मैं ये इसलिए पूछता हूं क्योंकि क्वेरी ऑप्टिमाइज़ेशन "सामान्य" डेटा पर आधारित होता है।

एक इंडेक्स (जैसे, INDEX(price) ) price . की तलाश में उपयोगी है जो बहुत कम बार होता है। वास्तव में, ऑप्टिमाइज़र इंडेक्स को छोड़ देता है यदि वह देखता है कि खोजा जा रहा मान लगभग 20% से अधिक बार होता है। इसके बजाय, यह केवल अनुक्रमणिका को अनदेखा करेगा और वही करेगा जो आपने पहले परीक्षण किया था--बस पूरी तालिका को स्कैन करें, किसी भी पंक्ति को अनदेखा करें जो मेल नहीं खाती।

आपको ऐसा करने में सक्षम होना चाहिए

EXPLAIN select * from books where price = 10

सूचकांक के साथ और बिना। वैकल्पिक रूप से, आप कोशिश कर सकते हैं:

EXPLAIN select * from books IGNORE INDEX(books_price_index) where price = 10
EXPLAIN select * from books FORCE INDEX(books_price_index) where price = 10

लेकिन, ... ऐसा लगता है कि ऑप्टिमाइज़र ने अनुक्रमणिका को नज़रअंदाज़ नहीं किया। मैं देख रहा हूं कि price . की "कार्डिनैलिटी" "1" है, जिसका अर्थ है कि उस कॉलम में केवल एक विशिष्ट मान है। यह 'आँकड़ा' या तो गलत है या भ्रामक। कृपया इसे चलाएँ और देखें कि क्या परिवर्तन होते हैं:

ANALYZE TABLE books;

यह कुछ यादृच्छिक जांच के माध्यम से आँकड़ों की पुनर्गणना करेगा, और हो सकता है उस "1" को शायद "2" में बदलें।

सामान्य सलाह:गढ़े हुए डेटा के विरुद्ध चलने वाले बेंचमार्क से सावधान रहें।



  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. मौजूदा पंक्तियों को साफ़ किए बिना बटन क्लिक करते समय डेटाबेस से jTable में नई पंक्तियां कैसे जोड़ें

  3. OSX 10.7 शेर पर MySQL रत्न

  4. एसक्यूएल चयन पसंद (असंवेदनशील आवरण)

  5. SQL बनाम MySQL:कुल संचालन और GROUP BY के बारे में नियम