मान और हैश की तालिका पर विचार करें, जैसे:
+------------+----------+------+-----+---------+----------------+
| 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
कॉलम पर पूर्ण परिणाम को सॉर्ट करने की आवश्यकता है ।