द्वारा ORDER का उपयोग करता है, मैं MySQL संस्करण 5.0.95 के साथ ड्रूपल 6 का उपयोग कर रहा हूं और एक ऐसे बाधा पर जहां मेरे प्रश्नों में से एक जो हालिया आलेख दिनांक के आधार पर सामग्री प्रदर्शित करता है धीमा हो जाता है और इस्तेमाल होने की आवृत्ति पूरी तरह से साइट प्रदर्शन को मार देती है। पता चलता है नीचे परिणामMySQL क्वेरी को ऑप्टिमाइज़ करने में असमर्थ जो क्लॉज
SELECT n.nid,
n.title,
ma.field_article_date_format_value,
ma.field_article_summary_value
FROM node n
INNER JOIN content_type_article ma ON n.nid=ma.nid
INNER JOIN term_node tn ON n.nid=tn.nid
WHERE tn.tid= 153
AND n.status=1
ORDER BY ma.field_article_date_format_value DESC
LIMIT 0, 11;
क्वेरी की व्याख्या: प्रश्न में प्रश्न के रूप में नीचे है
+----+-------------+-------+--------+--------------------------+---------+---------+----------------------+-------+---------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+--------------------------+---------+---------+----------------------+-------+---------------------------------+
| 1 | SIMPLE | tn | ref | PRIMARY,nid | PRIMARY | 4 | const | 19006 | Using temporary; Using filesort |
| 1 | SIMPLE | ma | ref | nid,ix_article_date | nid | 4 | drupal_mm_stg.tn.nid | 1 | |
| 1 | SIMPLE | n | eq_ref | PRIMARY,node_status_type | PRIMARY | 4 | drupal_mm_stg.ma.nid | 1 | Using where |
+----+-------------+-------+--------+--------------------------+---------+---------+----------------------+-------+---------------------------------+
इस क्वेरी अपेक्षाकृत सरल लग रहा था और सीधे आगे और लेख जो एक वर्ग के पुन: प्राप्त करता (अवधि) 153 और स्थिति 1 (प्रकाशित) हैं। लेकिन स्पष्ट रूप से अस्थायी तालिका का उपयोग करना और फाइलॉर्ट का उपयोग करना मतलब है कि क्वेरी को इसके बारे में ब्राउज़ करने के बारे में सीखा है।
ORDER BY खंड से field_article_date_format_value को निकालने से अस्थायी उपयोग करना हल हो जाता है; फाइलॉर्ट का उपयोग करने से क्वेरी निष्पादन समय कम हो जाता है लेकिन इसकी आवश्यकता होती है और इसे बंद नहीं किया जा सकता है, दुर्भाग्यवश साइट प्रदर्शन के लिए समान रूप से समान है।
मेरा मुकाबला यह है कि अधिकांश समस्याएं टर्म_नोड तालिका से आती हैं जो लेखों के लिए लेखों को मानचित्र करती है और कई रिश्ते तालिका है जिसका अर्थ है कि आलेख एक्स 5 श्रेणियों सी 1 से जुड़ा हुआ है .... सी 5 में 5 प्रविष्टियां होंगी उस तालिका में, यह तालिका आउट-ऑफ-द-बॉक्स ड्रूपल से है।
भारी डीबी सामग्री के साथ काम मिलती-जुलती क्वेरी ( When ordering by date desc, "Using temporary" slows down query, MySQL performance optimization: order by datetime field) मैं content_type_article जिसका datetime क्षेत्र के साथ ORDER BY खंड में प्रयोग किया जाता है के लिए एक समग्र सूचकांक बनाने की कोशिश की के कुछ के माध्यम से कुछ मेरे लिए नए और जा रहा है इसमें एक और कुंजी (निड) के साथ और INDEX को मजबूर करने की कोशिश की।
SELECT n.nid, n.title,
ma.field_article_date_format_value,
ma.field_article_summary_value
FROM node n
INNER JOIN content_type_article ma FORCE INDEX (ix_article_date) ON n.nid=ma.nid
INNER JOIN term_node tn ON n.nid=tn.nid
WHERE tn.tid= 153
AND n.status=1
ORDER BY ma.field_article_date_format_value DESC
LIMIT 0, 11;
परिणाम और निम्न क्वेरी व्याख्या नहीं मालूम था मदद करने के लिए बहुत
+----+-------------+-------+--------+--------------------------+-----------------+---------+----------------------+-------+---------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+--------------------------+-----------------+---------+----------------------+-------+---------------------------------+
| 1 | SIMPLE | tn | ref | PRIMARY,nid | PRIMARY | 4 | const | 18748 | Using temporary; Using filesort |
| 1 | SIMPLE | ma | ref | ix_article_date | ix_article_date | 4 | drupal_mm_stg.tn.nid | 1 | |
| 1 | SIMPLE | n | eq_ref | PRIMARY,node_status_type | PRIMARY | 4 | drupal_mm_stg.ma.nid | 1 | Using where |
+----+-------------+-------+--------+--------------------------+-----------------+---------+----------------------+-------+---------------------------------+
क्षेत्रों n.nid, ca.nid, ma.field_article_date_format_value सभी इंडेक्स किए गए। सीमा 0,11 के साथ डीबी पूछने से ऑर्डर द्वारा ऑर्डर के साथ लगभग 7-10 सेकंड लगते हैं लेकिन इसके बिना क्वेरी मुश्किल से एक सेकंड लेती है। डेटाबेस इंजन MyISAM है। इस पर किसी भी प्रकार की सहायताबहुत प्रशंसनीय होगी।
कोई भी उत्तर जो मुझे इस प्रश्न को सामान्य (जैसे तारीख के अनुसार बिना किसी प्रश्न के समान गति) में प्राप्त करने में मेरी सहायता कर सकता है, वह बहुत अच्छा होगा। nid
और field_article_date_format_value
के संयोजन के रूप में एक समग्र क्वेरी बनाने के मेरे प्रयास और क्वेरी में उपयोग ने कारण की सहायता नहीं की। मैं समस्या और किसी भी नए सुझाव पर अतिरिक्त जानकारी प्रदान करने के लिए खुला हूं।
प्रतिक्रिया के लिए धन्यवाद, हालांकि शब्द_नोड एन है: एन किसी विशेष शब्द के परिणामस्वरूप नोड्स मेरे मामले में अलग होंगे .. मैंने पहले व्युत्पन्न तालिका दृष्टिकोण को आजमाया था लेकिन क्वेरी निष्पादन लगभग पारंपरिक साधनों जैसा ही था । – optimusprime619