मैं पूरी तरह से इस पर फंस गया हूं। किसी कारण से जब मैं डीईएससी द्वारा इस क्वेरी को सॉर्ट करता हूं तो यह बहुत तेज़ है, लेकिन अगर एएससी द्वारा क्रमबद्ध किया गया तो यह बेहद धीमा है।डीईएससी द्वारा MySQL ऑर्डर तेज है लेकिन एएससी बहुत धीमी है
SELECT posts.id
FROM posts USE INDEX (published)
WHERE posts.feed_id IN (4953,622,1,1852,4952,76,623,624,10)
ORDER BY posts.published DESC
LIMIT 0, 50;
इस बारे में 32 सेकंड लेता है:
SELECT posts.id
FROM posts USE INDEX (published)
WHERE posts.feed_id IN (4953,622,1,1852,4952,76,623,624,10)
ORDER BY posts.published ASC
LIMIT 0, 50;
व्याख्या दोनों प्रश्नों के लिए एक ही है
यह लगभग 150 मिलीसेकेंड लेता है।
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE posts index NULL published 5 NULL 50 Using where
मैं इसे "उपयोग सूचकांक (प्रकाशित)" के लिए नीचे ट्रैक करने के बाद। अगर मैं इसे बाहर ले जाता हूं तो यह दोनों तरीकों से एक ही प्रदर्शन है। लेकिन एक्सप्लाइन दिखाता है कि क्वेरी समग्र रूप से कम कुशल है।
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE posts range feed_id feed_id 4 \N 759 Using where; Using filesort
और यहां तालिका है।
CREATE TABLE `posts` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`feed_id` int(11) NOT NULL,
`post_url` varchar(255) NOT NULL,
`title` varchar(255) NOT NULL,
`content` blob,
`author` varchar(255) DEFAULT NULL,
`published` int(12) DEFAULT NULL,
`updated` datetime NOT NULL,
`created` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `post_url` (`post_url`,`feed_id`),
KEY `feed_id` (`feed_id`),
KEY `published` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=196530 DEFAULT CHARSET=latin1;
क्या इसके लिए कोई फिक्स है? धन्यवाद!
स्पष्टीकरण के लिए धन्यवाद। क्या इसे ठीक करने का कोई तरीका है? मैं 2 अलग-अलग प्रश्नों का उपयोग करने के बारे में सोच रहा हूं, यह डीईएससी के लिए और एएससी के लिए एक अलग है। – Pepper
यदि आप mysql 5+ का उपयोग कर रहे हैं तो आप एकाधिक अनुक्रमणिका को परिभाषित करने में सक्षम होना चाहिए। –
http://dev.mysql.com/doc/refman/5 से।5/en/बनाने-index.html: एक index_col_name विनिर्देश एएससी या DESC के साथ समाप्त कर सकते हैं। इन कीवर्ड को आरोही या अवरोही सूचकांक मान संग्रहण निर्दिष्ट करने के लिए भविष्य के एक्सटेंशन के लिए अनुमति है। वर्तमान में, उन्हें पार्स किया गया है लेकिन अनदेखा किया गया है; सूचकांक मूल्य हमेशा आरोही क्रम में संग्रहीत होते हैं। तो, कैसे मैं एक सूचकांक कि desc क्रमबद्ध किया जाता है बना सकते हैं? – a1ex07