2011-07-28 4 views
8

मैं एक बड़ी मात्रा में डेटा के साथ विभाजित तालिका का उपयोग करता हूं। जैसे SUMक्या MySQL यूनियन सबक्वायरीज़ (या कुछ भी बिल्कुल) समानांतर कर सकता है?

प्रश्नों को शामिल कुल कार्य() और COUNT() आसानी से parallelized किया जा सकता: MySQL डॉक्स के अनुसार, यह कार्यसूची उस पर है।

... लेकिन, क्या मैं यूनियन सबक्वायरीज़ का उपयोग करके समान कार्यक्षमता प्राप्त कर सकता हूं? क्या वे समांतर हैं, या क्या मुझे सभी संभावित विभाजन कुंजी के साथ समवर्ती प्रश्न चलाने के लिए एक बहुप्रचारित क्लाइंट बनाना है?


संपादित करें:

सवाल सख्ती से संघ या सबक्वेरी के बारे में नहीं है। मैं अपने प्रश्नों के लिए जितना संभव हो उतना कोर उपयोग करना चाहता हूं। क्या ऐसा करने का कोई तरीका है (और सुनिश्चित करें कि यह हो गया है) मेरे आवेदन को पैरालाइजिंग किए बिना?

MySQL की वर्तमान समांतर क्षमताओं के बारे में कोई अच्छा दस्तावेज़?

+0

आप (चुनिंदा राशि (x) xxx से राशि के रूप में) एक (चुनिंदा गिनती (*) xxx से गिनती के रूप में) के रूप में से ' चयन a.sum, b.count मतलब के रूप में ख ' करना ' का योग योग के रूप में योग (x) के रूप में चुनें, गणना करें (*) xxx ' –

+0

@Luis से मैं केवल कुल कार्यों के बारे में बात नहीं कर रहा हूं।लेकिन अगर मैं ऐसा कुछ करता हूं: 'तालिका से चुनें AVG (संख्या) जहां वर्ग = 1 यूनियन तालिका से AVG (संख्या) चुनें जहां वर्ग = 2' – vbence

उत्तर

4

जहाँ तक मुझे पता है, वर्तमान में एक ही तरीका है और अधिक उपयोग करने के लिए आपके आवेदन में क्वेरी चलाने के लिए एक थ्रेड/कोर से, एक से अधिक कनेक्शन का उपयोग करना है। यह निश्चित रूप से एक समान लेनदेन का हिस्सा हैं जो समानांतर क्वेरी चलाने के लिए असंभव बनाता है।

+0

धन्यवाद! मैं केवल अपने चयन की गति की परवाह करता हूं, इसलिए लेनदेन वास्तव में एक मुद्दा नहीं है। – vbence

+2

PHP में मैं 4 कोर सर्वर पर समानांतर में 4 क्वेरी चलाने के लिए http://www.php.net/manual/en/mysqli.reap-async-query.php का उपयोग करने में सक्षम हूं। – Mchl

1

एक से अधिक प्रश्नों में एक साथ मिलकर अलग-अलग प्रश्न वास्तव में सबक्वायरी नहीं हैं, सख्ती से बोलते हैं।

  • प्रश्नों के क्रम में चलाए जा रहे हैं
  • कॉलम के डेटा प्रकार पहली क्वेरी
  • डिफ़ॉल्ट रूप से से निर्धारित होता है, समान पंक्तियों (अलग करने के लिए यूनिअन चूक) को छोड़ दिया जाता
  • परिणाम सेट है जब तक सभी प्रश्नों को चलाने के लिए तैयार नहीं किया जाता है

... अलग-अलग प्रश्नों को समानांतर करने का कोई तरीका नहीं है, क्योंकि वे सभी एक ही प्रश्न का वास्तव में हिस्सा हैं।

आप अपने कोड से समानांतर में विभिन्न प्रश्नों को चलाने का प्रयास करना चाहेंगे, और फिर प्रश्नों को पूरा करने के बाद परिणामों को एक साथ अपने कोड में जोड़ना चाहेंगे।

यूनियनों पर प्रलेखन here पाया जा सकता है।

+0

न तो तथ्य यह है कि' DISTINCT 'डिफ़ॉल्ट है, न ही पंक्ति प्रकार परिणाम भेजने से पहले ज्ञात होना चाहिए समानांतर प्रसंस्करण को प्रतिबंधित करें। लिंक किए गए दस्तावेज़ से: * हालांकि, व्यक्तिगत चयन विवरणों के लिए ORDER BY का उपयोग उस क्रम के बारे में कुछ भी नहीं है जिसमें पंक्तियां अंतिम परिणाम में दिखाई देती हैं क्योंकि डिफ़ॉल्ट रूप से यूनियन पंक्तियों का एक अनियमित सेट उत्पन्न करता है। * – vbence

+0

अलग-अलग चयनों के लिए आदेश, हाँ - लेकिन कोष्ठक जोड़ने के बिना, प्रश्नों के उस सेट के अंत में एक ऑर्डर द्वारा पूरा परिणाम सेट ऑर्डर किया जाएगा। – TehShrike

+0

ध्यान दें कि ऊपर दी गई सूची जरूरी नहीं है कि कुछ समांतरता कभी क्यों न हो, लेकिन वे सभी संबंधित हैं कि यूनियन क्वेरी के विभिन्न हिस्सों कैसे बातचीत करते हैं। – TehShrike

1

मुझे लगता है कि एक समान प्रश्न का उत्तर यहां दिया गया था। http://forums.mysql.com/read.php?115,84453,84453

(मैं एक टिप्पणी के रूप में इस पोस्ट मई किया जाना चाहिए, लेकिन मैं ईमानदारी से एक टिप्पणी बटन कहीं भी यहाँ नहीं मिल सका।)

+1

अच्छा खोज। यदि आप उस लड़के के समान समस्या को हल करना चाहते हैं (वह उच्च विलंबता के कारण अपने प्रश्नों को विभाजित नहीं करना चाहता था) तो आप हमेशा एक संग्रहित प्रक्रिया बना सकते हैं जो आपके लिए कई प्रश्नों को चलाएगा और फिर उन्हें एक बार में वापस कर देगा । – TehShrike

+2

आपको 50 प्रतिष्ठा पर टिप्पणी करने की पहुंच प्राप्त होगी। Http://stackoverflow.com/privileges – Mchl

+1

इसी तरह के प्रश्न देखें लेकिन कोई संतोषजनक उत्तर नहीं था। या लाइनों के बीच जवाब नहीं था? वैसे भी, मैंने प्रमाण पत्र को मेरे ** google: mysql समानांतर ** प्रश्न पोस्ट करने से पहले किया था। – vbence

संबंधित मुद्दे