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

इस MySQL क्वेरी को कैसे ऑप्टिमाइज़ करें? लाखों पंक्तियाँ

मैं निम्नलिखित अनुक्रमणिका (बी-पेड़ अनुक्रमणिका) बनाउंगा:

analytics(user_id, source, id) 
transactions(analytics, status)

यह गॉर्डन के सुझाव से अलग है।

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

आप विशिष्ट analytics.user_id . द्वारा फ़िल्टर करते हैं , इसलिए इस फ़ील्ड को अनुक्रमणिका में सबसे पहले होना चाहिए। फिर आप analytics.source के आधार पर समूह बनाते हैं . source . के आधार पर छँटाई से बचने के लिए यह सूचकांक का अगला क्षेत्र होना चाहिए। आप analytics.id . का भी संदर्भ देते हैं , इसलिए इस क्षेत्र को सूचकांक के हिस्से के रूप में रखना बेहतर है, इसे अंतिम रखें। क्या MySQL सिर्फ इंडेक्स को पढ़ने और टेबल को टच नहीं करने में सक्षम है? मुझे नहीं पता, लेकिन इसका परीक्षण करना आसान है।

transactions पर अनुक्रमणिका analytics से शुरू करना होगा , क्योंकि इसका उपयोग JOIN . में किया जाएगा . हमें status भी चाहिए ।

SELECT 
    analytics.source AS referrer, 
    COUNT(analytics.id) AS frequency, 
    SUM(IF(transactions.status = 'COMPLETED', 1, 0)) AS sales
FROM analytics
LEFT JOIN transactions ON analytics.id = transactions.analytics
WHERE analytics.user_id = 52094 
GROUP BY analytics.source 
ORDER BY frequency DESC 
LIMIT 10 


  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 ORDER BY RAND () फ़ंक्शन ऑर्डर कब करता है?

  2. MySQL IS NOT NULL और !='' के बीच अंतर

  3. मैं किसी तालिका के स्तंभों की गणना कैसे करूं

  4. मॉडलिंग उत्पाद प्रकार

  5. MySQL डिफ़ॉल्ट ऑर्डर WHERE पर निर्भर करता है