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

mysql - सम्मिलित तालिका कॉलम पर COALESCE द्वारा ऑर्डर अनुकूलित करना

यहाँ समस्या थी जैसा कि मैंने अपने प्रश्न के अद्यतन 2 में वर्णित किया था। MySQL अनुक्रमित का उपयोग ORDER BY संचालन को शीघ्रता से करने के लिए करता है। अधिक विशेष रूप से, MySQL B-trees का उपयोग करता है स्तंभों को अनुक्रमित करने के लिए (जैसे टाइमस्टैम्प - p.time/r.time), जो थोड़ी अधिक जगह का उपयोग करते हैं लेकिन तेज़ सॉर्टिंग की अनुमति देते हैं।

मेरी क्वेरी के साथ समस्या यह थी कि यह दो तालिकाओं में टाइम कॉलम द्वारा सॉर्ट कर रहा था, यदि उपलब्ध हो तो रेपोस्ट टेबल से टाइमस्टैम्प का उपयोग करके, और पोस्ट टेबल अन्यथा। चूंकि MySQL दोनों तालिकाओं के B-पेड़ों को संयोजित नहीं कर सकता, इसलिए यह दो अलग-अलग तालिकाओं के स्तंभों पर तेज़ अनुक्रमणिका छँटाई नहीं कर सकता।

मैंने इसे हल करने के लिए अपनी क्वेरी और टेबल संरचना को दो तरीकों से संशोधित किया।

1) पहले ब्लॉक किए गए उपयोगकर्ताओं के आधार पर फ़िल्टरिंग करें, इसलिए ऑर्डर केवल उन पोस्ट पर किया जाना है जो वर्तमान उपयोगकर्ता द्वारा एक्सेस किए जा सकते हैं। यह समस्या की जड़ नहीं थी, बल्कि व्यावहारिक अनुकूलन है। उदा.

SELECT * FROM (SELECT * FROM Post p WHERE p.author_id NOT IN (4, 5, 6...))...

2) प्रत्येक पोस्ट को उसके लेखक द्वारा एक रीपोस्ट के रूप में मानें, इसलिए प्रत्येक पोस्ट में एक जुड़ने योग्य रीपोस्ट और रीपोस्ट होने की गारंटी है। जिस पर इंडेक्स और सॉर्ट करना है। उदा.

SELECT * FROM (...) LEFT JOIN p.reposts repost ON (p.id = repost.post_id AND 
repost.time = (
  SELECT MIN(r.time) FROM Repost r WHERE p.id = r.post_id
  AND r.user_id IN (1, 2, 3...) AND r.user_id NOT IN (4, 5, 6...))
))
WHERE (repost.id IS NOT NULL) ORDER BY repost.time DESC LIMIT 0, 10

दिन के अंत में यह मुद्दा ORDER BY पर आ गया - इस दृष्टिकोण ने क्वेरी समय को लगभग 8 सेकंड से घटाकर 20 ms कर दिया।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP और MySQL का उपयोग करके उपयोगकर्ता छवियों को संग्रहीत करने का सबसे अच्छा तरीका क्या है?

  2. त्रिज्या के अनुसार मानचित्र डेटाबेस से बिंदुओं का चयन करें

  3. ग्रुप बाय पहला रिकॉर्ड लौटाएं

  4. MySQL में मिसिंग इंडेक्स कैसे खोजें?

  5. वीपीएन विकल्प के रूप में एसएसएच टनलिंग का उपयोग करना