निम्न क्वेरी काम करती है, लेकिन 10 रिकॉर्ड्स (2 सेकंड) के लिए यह बहुत धीमी है। प्रोफाइलिंग का कहना है कि यह एक टीएमपी टेबल बना रहा है, लेकिन मुझे यकीन नहीं है कि क्यों।MySQL - यह क्वेरी कैसे अनुकूलित की जा सकती है?
असल में, मैं वर्तमान उपयोगकर्ता, एसीएल समूहों में शामिल हो रहा हूं, उन सभी समूहों को प्राप्त करने के लिए, फिर समूह में कंपनियों से जुड़ना, उन सभी कंपनियों को प्राप्त करने के लिए, फिर कंपनियों को आदेश में शामिल करना , सभी आदेशों पाने के लिए ..
अगर मैं इस लाइन
ORDER BY orders.created_on DESC
फिर क्वेरी 0.06 सेकेंड में कार्यान्वित (अधिक स्वीकार्य तो) ..
सहायता, अनुकूलन के लिए पर किसी भी विचार को दूर ? बहुत धन्यवाद :)
SELECT
orders.uuid,
companies.name as company_name
FROM
users u
JOIN
users_acl_groups g on u.uuid = g.user_uuid
JOIN
users_acl acl on (acl.user_uuid = u.uuid or acl.group_uuid = g.group_uuid)
JOIN
companies on acl.item_uuid = companies.uuid
JOIN
orders on companies.uuid = orders.company_uuid
WHERE
u.uuid = 'DDEC8073-5056-C000-01ED583A51CBCA32' and orders.status <> ''
ORDER BY orders.created_on DESC
limit 0, 10;
अद्यतन, .. क्वेरी के समझाने
1 सरल आदेश सभी 9403 अस्थायी का उपयोग करना; फाइलों का उपयोग
1 सिंपल एसीएल सभी 1859 कहां उपयोग करना; बफर
1 सिंपल जी सभी 2005 का उपयोग करके; का उपयोग बफर
1 सरल कंपनियों eq_ref प्राथमिक प्राथमिक 52 table.orders.company_uuid 1
1 सरल यू सभी 33,595 जहां का उपयोग शामिल हो; विशिष्ट; बफर में शामिल होने का उपयोग कर
आपके शीर्षक को संशोधित करते हुए अनुमान लगाया गया है कि यह आपके अनिवार्य और मांगने वाले स्वर के कारण एक डाउनवोट खर्च करता है जब आपका प्रश्न अच्छी तरह से कहा जाता है। –
यूआईडी के अलावा किसी भी कॉलम पर लागू होने के साथ एक ही क्वेरी का उपयोग करने का प्रयास करें। Int, float, string, UID के साथ ऐसा करने का प्रयास करें और समय पर ध्यान दें। अगर आपको कोई बदलाव मिलता है तो हमें यह भी बताएं। –
क्या आपके पास order.created_on पर एक अनुक्रमणिका है? अपनी क्वेरी पर 'EXPLAIN' पर आउटपुट दिखाएं। शायद आप अन्य इंडेक्स से लाभ उठा सकते हैं। कौन सा 'एक्सप्लाइन' हमें बताएगा। – nos