मान और हैश की तालिका पर विचार करें, जैसे:
+------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| val | char(9) | NO | | NULL | |
| val_hashed | char(50) | YES | | NULL | |
+------------+----------+------+-----+---------+----------------+
निम्न क्वेरी 0.00 सेकंड में समाप्त होती है:
SELECT * FROM hashes ORDER BY 1 DESC LIMIT 1;
हालाँकि, इस क्वेरी में 3 मिनट 17 सेकंड लगते हैं:
SELECT val FROM hashes ORDER BY 1 DESC LIMIT 1;
मैं देखता हूं कि जब क्वेरी प्रक्रिया सूची में चल रही है तो इसे स्थिति के रूप में दिखाता है Sorting result। स्थिति पूरी तरह से प्रतिलिपि प्रस्तुत करने योग्य है। ध्यान दें कि INSERTलगातार टेबल पर एक और प्रक्रिया प्रदर्शन संचालन है।
क्वेरी से अधिक विशिष्ट क्वेरी को चलाने में अधिक समय क्यों लगेगा *? मैंने हमेशा माना है कि *प्रदर्शन कारणों से प्रश्नों को विशेष रूप से टाला जाना चाहिए।
ORDER BY NUMBERवाक्य रचना काफी प्रवण त्रुटि है।
SELECT *जोड़ते हुए, एक कॉलम इंडेक्स के साथ संयुक्त ORDER BYहै जो कि कॉलम को सॉर्ट किया जा रहा है - *एस से बचने का एक और कारण ...
*स्पष्ट नहीं है। इसलिए यह कहना कि "मुझे सभी कॉलम दें और तीसरे नंबर से सॉर्ट करें" के बारे में निर्धारक के रूप में कहा जाता है "सुपरमार्केट में जाएं और मुझे बताएं कि आपने कितने ट्रैफिक लाइट पास किए हैं"
idपहली पंक्ति को खोजने के लिए प्राथमिक कुंजी सूचकांक का उपयोग करता है । दूसरे (पूर्ण अनुक्रमित)valकॉलम पर पूर्ण परिणाम को सॉर्ट करने की आवश्यकता है ।