MySQL में विचारों का उपयोग कब करें?


54

विश्लेषण में उपयोग के लिए कई जॉइन से टेबल बनाते समय, व्यू का उपयोग करना कब पसंद किया जाता है?

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

मैंने एसओ पर संबंधित प्रश्न के उत्तर के बाद (एस का उपयोग करने के लिए आर, जब एसक्यूएल का उपयोग करने के लिए ) का उपयोग करना शुरू कर दिया । शीर्ष-मतदान का उत्तर शुरू होता है "SQL में डेटा जोड़तोड़ तब तक करें जब तक कि डेटा एक ही तालिका में न हो, और फिर बाकी के R में करें।"

मैंने विचारों का उपयोग करना शुरू कर दिया है, लेकिन मैं कुछ मुद्दों पर विचार के साथ चला हूं:

  1. प्रश्न बहुत धीमे हैं
  2. दृश्य उत्पादन से बैकअप डेटाबेस में डंप नहीं किया जाता है जो मैं विश्लेषण के लिए उपयोग करता हूं।

क्या इस उपयोग के लिए विचार उपयुक्त हैं? यदि हां, तो क्या मुझे प्रदर्शन दंड की उम्मीद करनी चाहिए? क्या विचारों पर प्रश्नों को गति देने का एक तरीका है?


ऐसा लगता है कि यहां दृश्य उपयुक्त हैं, लेकिन मुझे यकीन नहीं है कि उन्हें क्वेरी करते समय मंदी का कारण क्या हो सकता है।
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner कोई निदान है जो मदद करेगा (एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण बनाने की कमी)? एक ही जटिल क्वेरी लेती है <4s जब सीधे जोड़े गए तालिकाओं पर और> 25 s जब विचारों पर किया जाता है। क्या प्रदर्शन पर जुर्माना नहीं लगने की उम्मीद है?
डेविड लेबॉउर

यह एक लंबा समय रहा है क्योंकि मैंने MySQL का उपयोग किया है इसलिए मैं वास्तव में नहीं कह सकता।
FrustratedWithFormsDesigner

मैं MySQL का उपयोग करता हूं और मैं आपको बताऊंगा कि जब आप 100K और उससे अधिक के हो जाते हैं तो दृश्य भयानक, अनुपयोगी होते हैं, बस सीधे प्रश्नों का उपयोग करें जहां आपके पास वापस लौटने के लिए कौन से फ़ील्ड हैं और क्या उपयोग करने के लिए जुड़ते हैं
स्टीफन सेन्कोमागो मूसोक

जवाबों:


43

MySQL में दृश्य दो अलग-अलग एल्गोरिदम में से एक का उपयोग करके संभाला जाता है: MERGEया TEMPTABLEMERGEबस उचित उपनाम के साथ एक क्वेरी विस्तार है। TEMPTABLEयह जैसा दिखता है, वैसा ही होता है, जहां WHERE क्लॉज चलाने से पहले दृश्य एक अस्थायी तालिका में परिणाम डालता है, और इस पर कोई अनुक्रमणिका नहीं होती है।

'तीसरा' विकल्प है UNDEFINED, जो MySQL को उचित एल्गोरिथ्म का चयन करने के लिए कहता है। MySQL का उपयोग करने का प्रयास करेगा MERGEक्योंकि यह अधिक कुशल है। मुख्य चेतावनी:

यदि MERGE एल्गोरिथ्म का उपयोग नहीं किया जा सकता है, तो इसके बजाय एक अस्थायी तालिका का उपयोग किया जाना चाहिए। MERGE का उपयोग नहीं किया जा सकता है यदि दृश्य में निम्न निर्माण शामिल हैं:

  • सकल कार्य (SUM) (, MIN,), MAX (), COUNT (), और इसके बाद)

  • DISTINCT

  • समूह द्वारा

  • होने

  • आप LIMIT

  • यूनिअन या यूनिअन ऑल

  • चयन सूची में उपश्रेणी

  • केवल शाब्दिक मूल्यों को संदर्भित करता है (इस मामले में, कोई अंतर्निहित तालिका नहीं है)

[स्रोत]

मैं यह अनुमान लगाने के लिए उद्यम करूंगा कि आपके VIEWS को TEMPTABLE एल्गोरिथम की आवश्यकता है, जिससे प्रदर्शन समस्याएं पैदा हो सकती हैं।

यहाँ MySQL में विचारों के प्रदर्शन पर एक बहुत पुरानी ब्लॉग पोस्ट है और यह बेहतर नहीं लगता है।

हालाँकि, अस्थायी तालिका के इस मुद्दे पर सुरंग के अंत में कुछ प्रकाश हो सकता है जिसमें अनुक्रमणिका नहीं है (पूर्ण तालिका स्कैन के कारण)। में 5.6 :

ऐसे मामलों के लिए जब FROM क्लॉज में एक सबक्वेरी के लिए मेटेरियलाइजेशन की आवश्यकता होती है, ऑप्टिमाइज़र, मैटेरियलाइज्ड टेबल में इंडेक्स जोड़कर परिणाम तक पहुंच को तेज कर सकता है। ... इंडेक्स को जोड़ने के बाद, ऑप्टिमाइज़र भौतिककृत व्युत्पन्न तालिका को एक सामान्य तालिका के साथ एक सूचकांक के साथ व्यवहार कर सकता है, और यह उत्पन्न सूचकांक से समान रूप से लाभ उठाता है। इंडेक्स के बिना क्वेरी निष्पादन की लागत की तुलना में इंडेक्स निर्माण का ओवरहेड नगण्य है।

जैसा कि @ypercube बताते हैं, MariaDB 5.3 ने एक ही अनुकूलन जोड़ा है। इस लेख में प्रक्रिया का एक दिलचस्प अवलोकन है:

ऑप्टिमाइज़ेशन लागू किया जाता है, तब व्युत्पन्न तालिका को उसके माता-पिता में नहीं मिलाया जा सकता है चयन जो तब होता है जब व्युत्पन्न तालिका योग्यता दृश्य के मानदंड को पूरा नहीं करती है


मैंने इन दावों पर कोई परीक्षण नहीं किया है, लेकिन मारियाडीबी 5.3 (हाल ही में स्थिर के रूप में जारी किया गया है) के ऑप्टिमाइज़र पर कुछ प्रमुख सुधार हुए हैं, जिनमें दृश्य :Fields of merge-able views and derived tables are involved now in all optimizations employing equalities
ypercubeᵀᴹ

उस लिंक के लिए @ypercube धन्यवाद ... ऐसा प्रतीत होता है कि MySQL 5.6 में कम से कम व्युत्पन्न तालिकाओं में एक सूचकांक जोड़ने का अनुकूलन है।
डेरेक डाउनी

14

दृश्य सुरक्षा उपकरण हैं। आप नहीं चाहते कि कोई विशेष उपयोगकर्ता या एप्लिकेशन यह जाने कि आपकी डेटा तालिका कहां है, आप केवल उस कॉलम के साथ एक दृश्य प्रदान करते हैं, जिसकी उसे आवश्यकता है।

याद रखें कि विचार हमेशा प्रदर्शन को नीचा दिखाते हैं, समान प्रश्नों को संग्रहीत प्रक्रियाओं और कार्यों को देखा जाना चाहिए, न कि विचारों को।

एक क्वेरी ट्यूनिंग बनाने के लिए, हमेशा सर्वोत्तम प्रथाओं का पालन करें, WHERE क्लॉज़ में फ़ंक्शन का उपयोग करने से बचें, चयनों को गति देने के लिए अनुक्रमणिका बनाएं, लेकिन इसका दुरुपयोग न करें सम्मिलित आवेषण, अद्यतन और हटाए गए अनुक्रमित करें।

अच्छा प्रलेखन है जो आपकी सहायता कर सकता है: http://www.toadworld.com/LinkClick.aspx?fileticket=3qbwCnzY/0A=&tabid=234


5
मैं असहमत हूं कि विचार (केवल) सुरक्षा उपकरण हैं। उनका उपयोग उस तरह से किया जा सकता है, लेकिन हम उन प्रश्नों में जटिलता को दूर करने के लिए उपयोग करते हैं जो हमारे रिपोर्ट डेवलपर्स नियमित आधार पर उपयोग करते हैं।
JHFB

2
@ जेएचएफबी: मैं आपसे सहमत हूं, लेकिन शायद यह केवल MySQL में कैसे काम करता है, जहां यह गंभीर प्रदर्शन दंड की तरह लगता है?
FrustratedWithFormsDesigner

@frustratedwithformsdesigner महान बिंदु - जब से मैंने MySQL का उपयोग किया है तब से यह एक समय है।
JHFB

1
@JHFB मैसूरल पर विचार एक बड़ी समस्या है! mysqlperformanceblog.com/2007/08/12/…
रेनियर मोरिला

2
@RainierMorilla दृश्य प्रदर्शन ख़राब !!
सुहैल गुप्ता

-2

मुझे लगता है कि एक से अधिक टेबल क्वेरी से पार पाने के लिए तालिकाओं को एक में विलय करने के लिए पूर्वनिर्धारित संरचना (कोई डेटा) नहीं है, जो कि त्वरित संबंधपरक क्वेरी के लिए वास्तविक डेटा से उपयोग किया जा सकता है ...


2
यह बहुत स्पष्ट नहीं है कि आप किस बिंदु को बनाने की कोशिश कर रहे हैं और यह कि मूल पोस्ट में दिए गए मुद्दों को कैसे संबोधित किया जाए। आप प्रश्न को फिर से पढ़ना चाह सकते हैं, लेकिन किसी भी स्थिति में कृपया अपने उत्तर के विस्तार पर विचार करें ताकि यह स्पष्ट हो सके कि इसे ओपी की समस्या पर कैसे लागू किया जा सकता है।
एंड्री एम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.