मैं एक घटना को ट्रैक प्रणाली है जो देखने तालिकाओं के एक मुट्ठी भर के साथ-साथ प्राथमिक प्रवेश तालिका का उपयोग करता पर काम कर रहा हूँ। एक रिपोर्ट में मैं लिख रहा हूं, आंकड़ों को देखने के लिए एक वस्तु का चयन किया जा सकता है। अंतर घटाने (यानी हिट) के क्रम में सभी ऑब्जेक्ट्स दिखाता है।, इंडेक्स का उपयोग करके अस्थायी उपयोग करते हुए, filesort का उपयोग कर - कैसे इसे ठीक करने के लिए?
दो तालिकाओं (थोड़ा कांट छांट, लेकिन आप सार मिलता है) के लिए स्कीमा:
CREATE TABLE IF NOT EXISTS `event_log` (
`event_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(5) DEFAULT NULL,
`object_id` int(5) DEFAULT NULL,
`event_date` datetime DEFAULT NULL,
PRIMARY KEY (`event_id`),
KEY `user_id` (`user_id`),
KEY `object_id` (`object_id`)
);
CREATE TABLE IF NOT EXISTS `lookup_event_objects` (
`object_id` int(11) NOT NULL AUTO_INCREMENT,
`object_desc` varchar(255) NOT NULL,
PRIMARY KEY (`object_id`)
);
क्वेरी मैं कुछ समस्या आ रही नीचे है। यह ~ 100 प्रविष्टियों की मेरी मेज के साथ ठीक काम करता है, लेकिन एक्सप्लाइन मुझे थोड़ा चिंतित करता है।
explain SELECT
el.object_id,
leo.object_desc,
COUNT(el.object_id) as count_rows
FROM
event_log el
LEFT JOIN lookup_event_objects leo ON leo.object_id = el.object_id
GROUP BY
el.object_id
ORDER BY
count_rows DESC,
leo.object_desc ASC
रिटर्न: Using index; Using temporary; Using filesort
तो - क्या मेरी स्कीमा और/या क्वेरी के साथ गलत क्या है MySQL temporary
और filesort
पर वापस गिर करने के लिए? या यह अनुकूलित के रूप में है क्योंकि यह ORDER BY का उपयोग कर सकता है? जब "अस्थायी का उपयोग करना"
वस्तुओं मैंने कभी इस क्वेरी से लौटने चाहते हैं की अधिकतम संख्या हालांकि मैं संभवतः event_log में पंक्तियों के लाखों होगा <300, है। मैंने पुष्टि की कि 'अस्थायी' का उपयोग करना और 'फाइलोर्ट का उपयोग करना' दूर हो जाता है जब मैं ORDER BY को हटा देता हूं। मैं इसे बदलने की कोशिश करूंगा ताकि मैं स्क्रिप्टिंग भाषा (PHP) के साथ ऑर्डरिंग (सरणी में) कर सकूं। आपकी प्रतिक्रिया और लिंक के लिए धन्यवाद। –
यह अभी भी MySQL में सॉर्टिंग करने के लिए और अधिक कुशल हो सकता है - इसमें पहले से ही डेटा संरचना में लोड किया गया डेटा है, –
यह निश्चित रूप से क्लीनर होगा। प्रतिक्रिया के लिए धन्यवाद। –