MySQL
उत्तर
यह प्रदर्शन के लिए है; ORDER BY NULL
GROUP BY
क्लॉज जोड़ने के बाद आपकी क्वेरी तेज हो जाएगी।
एक व्याख्या, manual से:
डिफ़ॉल्ट रूप से, MySQL सभी
GROUP BY col1, col2, ...
प्रश्नों सॉर्ट करता है जैसे आप क्वेरी मेंORDER BY col1, col2, ...
निर्दिष्ट रूप में अच्छी तरह। यदि आप एक स्पष्टORDER BY
खंड शामिल करते हैं जिसमें एक ही कॉलम सूची होती है, तो MySQL बिना किसी गति दंड के इसे अनुकूलित करता है, हालांकि सॉर्टिंग अभी भी होती है। यदि किसी क्वेरी मेंGROUP BY
शामिल है लेकिन आप परिणाम को सॉर्ट करने के ओवरहेड से बचना चाहते हैं, तो आपORDER BY NULL
निर्दिष्ट करके सॉर्टिंग को दबा सकते हैं। उदाहरण के लिए:INSERT INTO foo SELECT a, COUNT(*) FROM bar GROUP BY a ORDER BY NULL;
This article लेखक सफलतापूर्वक इस चाल, EXPLAIN
उत्पादन के प्रासंगिक भागों के साथ पूरा का दुरुपयोग करके एक धीमी गति से क्वेरी अनुकूलन के वर्णन करता है।
यह लिंक
http://dev.mysql.com/doc/refman/5.7/en/order-by-optimization.html
यह प्रश्नों कि द्वारा समूह का उपयोग को गति कहते हैं
एक प्रश्न ग्रुप द्वारा भी शामिल है, लेकिन आपको परिणाम छँटाई की भूमि के ऊपर से बचना चाहते हैं, तो आप नल द्वारा ऑर्डर निर्दिष्ट करके सॉर्टिंग दबा सकते हैं।
कुछ डेवलपर्स ग्रुप बाय क्लॉज का उपयोग करके प्रश्नों की गति को बढ़ाने के लिए न्यूल द्वारा ऑर्डर करते थे।
कारण यह है कि MySQL 5.6 से पहले ग्रुप बाय क्लॉज को कॉल करते समय डेटा का एक अंतर्निहित प्रकार था। इसलिए एनयूएलएल द्वारा ऑर्डर जोड़ना इस अंतर्निहित प्रकार को निष्क्रिय कर रहा था और इसके परिणामस्वरूप क्वेरी को तेजी से चलाया जा रहा था।
MySQL 5.6 के बाद से, GROUP BY क्लॉज़ के निहित छंटाई http://www.tocker.ca/2013/10/21/heads-up-implicit-sorting-by-group-by-is-deprecated-in-mysql-5-6.html
हटाया गया है इसलिए द्वारा शून्य तकनीक आदेश अब बेकार है।
[आधिकारिक दस्तावेज़] आदेश छोड़ नहीं करना चाहते हैं (http://dev.mysql.com/doc/refman/5.6/en/order-by-optimization.html) यह भी कहता है: "** नोट ** MySQL 5.6 में अंतर्निहित 'ग्रुप बाय' सॉर्टिंग पर निर्भरता को हटा दिया गया है।" – Pang
-1; यह जवाब गलत है। * निहित सॉर्टिंग पर * निर्भर * को हटा दिया गया है, लेकिन यह अभी भी MySQL का हिस्सा है और इसलिए न्यूल द्वारा ऑर्डर अभी भी एक उद्देश्य प्रदान करता है। आप जिस लेख से लिंक करते हैं वह यह भी कहता है कि * अभी तक कुछ भी नहीं बदला है *। –
मैं soory हूँ, लेकिन मैं कार्यक्षमता देख सकते हैं:
mysql> SELECT *,COUNT(status) FROM big_table GROUP BY status;
+----------------+----------------------------------+--------+---------------+
| id | hash | status | COUNT(status) |
+----------------+----------------------------------+--------+---------------+
| 14149924276950 | 20e2873f1026c867a1044681895130b8 | 0 | 268044 |
| 14149924273884 | 889dc604799c563783396a3cb2c688a5 | 1 | 277474 |
| 1414992427397 | 4e1769e2e64e737f37b918b834f8f696 | 2 | 279815 |
| 14149924277490 | 539b71f083fc95a93d0d4b904a56ebb2 | 3 | 290216 |
| 14149924274097 | ec694b8fc1786ea4f612dbe55d351715 | 4 | 272748 |
| 14149924272735 | 64c3d1077c3ed3ee02398896376327aa | 5 | 280785 |
| 14149924278670 | 05c143790ba4ecf73fc3be78d095c067 | 6 | 295417 |
| 14149924271189 | 79bcafe38074703a49fb372c95e3676a | 7 | 310937 |
| 14149924273279 | 29069b0fe511c160e95f98e2e2b770ac | 8 | 279338 |
| 14149924277367 | 2e72091679aa6e3d64ed3c407ceeb6d4 | 9 | 281226 |
+----------------+----------------------------------+--------+---------------+
10 rows in set (44.43 sec)
mysql> SELECT *,COUNT(status) FROM big_table GROUP BY status ORDER BY NULL;
+----------------+----------------------------------+--------+---------------+
| id | hash | status | COUNT(status) |
+----------------+----------------------------------+--------+---------------+
| 14149924272735 | 64c3d1077c3ed3ee02398896376327aa | 5 | 280785 |
| 14149924277367 | 2e72091679aa6e3d64ed3c407ceeb6d4 | 9 | 281226 |
| 1414992427397 | 4e1769e2e64e737f37b918b834f8f696 | 2 | 279815 |
| 14149924278670 | 05c143790ba4ecf73fc3be78d095c067 | 6 | 295417 |
| 14149924274097 | ec694b8fc1786ea4f612dbe55d351715 | 4 | 272748 |
| 14149924271189 | 79bcafe38074703a49fb372c95e3676a | 7 | 310937 |
| 14149924276950 | 20e2873f1026c867a1044681895130b8 | 0 | 268044 |
| 14149924273279 | 29069b0fe511c160e95f98e2e2b770ac | 8 | 279338 |
| 14149924277490 | 539b71f083fc95a93d0d4b904a56ebb2 | 3 | 290216 |
| 14149924273884 | 889dc604799c563783396a3cb2c688a5 | 1 | 277474 |
+----------------+----------------------------------+--------+---------------+
10 rows in set (44.13 sec)
डिफ़ॉल्ट रूप से, MySQL सभी समूह को col1, col2, ... जैसा क्वेरी करता है जैसे कि आपने क्वेरी में col1, col2, ... द्वारा ऑर्डर निर्दिष्ट किया है। यदि आप एक स्पष्ट ऑर्डर द्वारा क्लॉज को शामिल करते हैं जिसमें एक ही कॉलम सूची होती है, तो MySQL बिना किसी गति दंड के इसे अनुकूलित करता है, हालांकि सॉर्टिंग अभी भी होती है।यदि किसी क्वेरी में ग्रुप BY शामिल है लेकिन आप परिणाम को सॉर्ट करने के ओवरहेड से बचना चाहते हैं, तो आप ऑर्डर द्वारा ऑर्डर करके सॉर्टिंग को दबा सकते हैं। http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html – Mahoor13
किसी भी प्रश्न उदाहरण पोस्ट अगर आप –
आप कुछ भी द्वारा आदेश सिर्फ खंड द्वारा कुल मिलाकर – cusimar9