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

ऑप्टिमाइज़ करें चुनें ... जहां में (...)

SELECT * FROM  products                         <<-- select * is non-optimal
WHERE  prodid in (10331,11639,12127..) 
ORDER BY Field(prodid, 10331,11639,12127...);   <<-- your problem is here

सबसे पहले prodid . पर एक इंडेक्स लगाएं @ एंथनी का जवाब देखें।

पढ़ने के लिए क्वेरी बदलें:

SELECT only,the,fields,you,need FROM  products
WHERE  prodid in (10331,11639,12127..) 
ORDER BY prodid

यदि आप सुनिश्चित करते हैं कि आपका IN सूची को IN . पर ऑफ़र करने से पहले आरोही क्रम में लगाया जाता है खंड, order by prodid order by field(... . के समान परिणाम देगा

  • फ़ील्ड के बजाय फ़ंक्शन का उपयोग करने से इंडेक्स का उपयोग करने की कोई भी संभावना समाप्त हो जाती है, जिससे धीमापन आ जाता है।
  • select * डेटा प्राप्त करेगा जिसकी आपको आवश्यकता नहीं हो सकती है, जिससे अतिरिक्त डिस्क एक्सेस, और अतिरिक्त मेमोरी उपयोग और अतिरिक्त नेटवर्क ट्रैफ़िक हो सकता है।
  • InnoDB पर, यदि आप केवल select अनुक्रमित फ़ील्ड, MySQL कभी तालिका नहीं पढ़ेगा, लेकिन केवल अनुक्रमणिका बचत समय (आपके मामले में यह शायद कोई समस्या नहीं है)

कुछ तरकीबें हैं जिनका आप उपयोग कर सकते हैं।

  • यदि उत्पाद तालिका बहुत बड़ी नहीं है, तो आप इसे memory बना सकते हैं टेबल, जिसे रैम में स्टोर किया जाता है। बड़े टेबल के लिए ऐसा न करें, इससे अन्य चीजें धीमी हो जाएंगी।
    आप केवल hash का उपयोग कर सकते हैं मेमोरी टेबल पर इंडेक्स।
  • यदि प्रोडिड निरंतर हैं, तो आप BETWEEN 1000 AND 1019 का उपयोग कर सकते हैं इसके बजाय
    IN (1000, 1001 ..., 1019)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. स्तंभ संख्या पंक्ति 1 पर मान गणना से मेल नहीं खाती VendorError:1136

  2. MYSQL टाइमस्टैम्प को महीने में बदलें

  3. डाकिया के साथ Laravel API को फ़ाइल भेजें

  4. MySQL स्ट्रिंग का अंतिम सूचकांक

  5. जैसे ही AngularJs में डेटाबेस में परिवर्तन होता है, स्वचालित दृश्य अपडेट को कैसे कार्यान्वित करें?