से कई वर्गीकृत किया मूल्यों को प्राप्त मैं इस तरह एक मेज संरचना है:mysql
CREATE TABLE `test` (
`a` tinyint(3) unsigned DEFAULT 0,
`b` tinyint(3) unsigned DEFAULT 0,
`c` tinyint(3) unsigned DEFAULT 0,
`d` tinyint(3) unsigned DEFAULT 0,
`e` tinyint(3) unsigned DEFAULT 0
);
यह कुछ स्तंभ 0-200 से मूल्यों है कि साथ के बारे में 30 स्तंभ हैं (ए, बी) और कुछ केवल 5 मान (0,1,2,3,4) (कॉलम सीडी)। Aprox हैं। तालिका में 120k पंक्तियां।
प्रति पंक्ति आइटम्स की संख्या को दिखाने के लिए मैं प्रत्येक स्तंभ के लिए एक प्रश्न का उपयोग करें:
select a, count(*) FROM test group by a;
select b, count(*) FROM test group by b;
select c, count(*) FROM test group by c;
select d, count(*) FROM test group by d;
select e, count(*) FROM test group by e;
इस के साथ समस्या यह है कि यह 30 प्रश्नों (प्रति स्तंभ एक) और मूल रूप से सक्रिय कर देगा है एक ही सेट के ऊपर जाता है प्रत्येक बार डेटा का।
क्या ऐसा करने का कोई बेहतर तरीका है?
मैंने ग्रुप बाय के साथ रोलअप के साथ प्रयास किया है, लेकिन इसके परिणामस्वरूप एक बड़े परिणामस्वरूप जो प्रत्येक व्यक्तिगत क्वेरी की तुलना में प्रक्रिया में धीमा है।
आप SQLfiddle पर डेटा की एक चयन देख सकते हैं: http://sqlfiddle.com/#!2/a9fd8/1
हर बार 'अस्थायी उपयोग करना; Filesort' का उपयोग करके आप अपने कॉलम पर सॉर्ट किए गए इंडेक्स जोड़ सकते हैं? – edze
किस पर मुझे एक इंडेक्स जोड़ना चाहिए? सब पर? यह भी ध्यान रखें, कि कुछ अन्य फ़ील्ड हैं जिन पर खोज की गई है (मेरे पास उन पर एक सूचकांक है)। – Nin
हां, समूह के लिए आवश्यक प्रत्येक कॉलम के लिए एक आदेश दिया गया इंडेक्स। यदि आप 'a' से समूह करते हैं, तो MySQL आपकी तालिका को 'ए'' से सॉर्ट करना शुरू कर देता है। मुझे लगता है कि यह तुम्हारी बाधा है। – edze