2010-04-29 10 views
6

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

let's say the following example... 

    SELECT  dbo.vw_WebInventory.skref AS SaleID, dbo.vw_WebInventory.lot_number AS LotNumber, dbo.vw_WebInventory.Description, 
          dbo.vw_WebInventory.Image AS HasImage, dbo.vw_WebInventory.Sold, dbo.vw_WebInventory.Withdrawn, dbo.vw_WebTopBids.TopBid, 
          ISNULL(dbo.vw_WebInventory.Mins_Extend_y, 0) AS BidTimeExtend, dbo.Sale.SaleTypeID, dbo.Sale.ClosingDate, dbo.vw_WebInventory.ExDate, 
          dbo.vw_WebInventory.CurrDate, CASE WHEN vw_WebInventory.ExDate > ISNULL(vw_WebInventory.LotClosingDate, Sale.ClosingDate) 
          THEN 1 ELSE 0 END AS ShowBidMessage 
    FROM   dbo.vw_WebInventory INNER JOIN 
          dbo.Sale ON dbo.vw_WebInventory.skref = dbo.Sale.SaleID LEFT OUTER JOIN 
          dbo.vw_WebTopBids ON dbo.vw_WebInventory.skref = dbo.vw_WebTopBids.CatNumber AND dbo.vw_WebInventory.lot_number = dbo.vw_WebTopBids.LotNumber 

जहां vm_webTopBids और vm_WebInventory दो अलग दृष्टिकोण हैं ... यह संभव इस दृश्य का अनुकूलन है?

उत्तर

18

नेस्टिंग बार देखा गया है कि अन्य विचारों फोन प्रदर्शन के लिए एक बहुत ही बुरा तकनीक है। चूंकि इसे अनुक्रमित नहीं किया जा सकता है, इसलिए इसे एक रिकॉर्ड प्राप्त करने के लिए शीर्ष अंतर्निहित दृश्य को कॉल करना होगा। इसके अलावा अंततः आपको पर्याप्त परतें मिलती हैं और आप दृश्य में कितनी तालिकाओं को कॉल कर सकते हैं की सीमा को हिट करते हैं (और यदि व्यू 1 कॉल 2 और व्यू 3 को कॉल करता है और दोनों एक ही अंतर्निहित टेबल को कॉल करते हैं, तो आप एक बार के बजाय दो बार जुड़ रहे हैं जो अक्सर खराब होता है प्रदर्शन। विचारों से विचारों को कॉल करना बंद करें या आपको जल्द ही एक अनुपयोगी प्रणाली होगी।

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

+0

मदद के लिए धन्यवाद ... – girish

3

एक दृश्य एक मैक्रो है जो बाहरी क्वेरी में विस्तारित होता है। जब तक यह एक अनुक्रमित दृश्य न हो और आपके पास एंटरप्राइज़ संस्करण न हो, तो इसे आसानी से अनदेखा कर दिया जाता है।

तो यदि आप 3 विचारों में शामिल होते हैं और प्रत्येक विचार 5 टेबल का उपयोग करता है, तो आप 15 टेबल के साथ बड़ी संख्या में शामिल होते हैं। उदाहरण

आप विचारों की चोटी पर देखा गया घोंसला बनाने से कर रहे हैं के बाद

SELECT 
    CONVERT(decimal(28, 1), migs.avg_total_user_cost * migs.avg_user_impact * 
    (migs.user_seeks + migs.user_scans)) AS improvement_measure, 
    'CREATE INDEX missing_index_' + CONVERT(varchar, mig.index_group_handle) + 
    '_' + CONVERT(varchar, mid.index_handle) + ' ON ' + mid.statement + ' (' + 
    ISNULL(mid.equality_columns, '') + 
    CASE WHEN mid.equality_columns IS NOT NULL AND 
       mid.inequality_columns IS NOT NULL THEN ',' 
     ELSE '' 
    END + ISNULL(mid.inequality_columns, '') + ')' + ISNULL(' INCLUDE (' + 
                  mid.included_columns + 
                  ')', '') AS create_index_statement, 
    migs.*, 
    mid.database_id, 
    mid.[object_id], 
    mig.index_group_handle, 
    mid.index_handle 
FROM 
    sys.dm_db_missing_index_groups mig INNER JOIN 
    sys.dm_db_missing_index_group_stats migs ON migs.group_handle = mig.index_group_handle INNER JOIN 
    sys.dm_db_missing_index_details mid ON mig.index_handle = mid.index_handle 
WHERE 
    CONVERT(decimal(28, 1), migs.avg_total_user_cost * migs.avg_user_impact * 
    (migs.user_seeks + migs.user_scans)) > 10 AND 
    database_id = DB_ID() 
ORDER BY 
    migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + 
                 migs.user_scans) DESC 

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

आप सबसे अच्छा शर्त Database Tuning Advisor या गुम सूचकांक स्क्रिप्ट है। दृश्य के लिए कोई अनुकूलन संभव नहीं है।

के रूप में उल्लेख किया है, इस

+0

देखने के लिए इंडेक्स जोड़ने के लिए उपयोगी है गति को अनुकूलित करें? – girish

+0

@ गिरिश: अधिक जानकारी के बिना कहना मुश्किल है। निजी तौर पर, मैं अनुक्रमित विचारों पर विचार करने से पहले ऊपर डीटीए या स्क्रिप्ट का उपयोग करता हूं – gbn

+0

मैंने ऊपर उदाहरण का उल्लेख किया है ... – girish

2

अनुक्रमित नहीं किया जा सकता है इस मामले में, दृश्य अनुक्रमित नहीं किया जा सकता है, क्योंकि यह एक बाहरी शामिल हों शामिल हैं।

उन पर अनुक्रमण विचारों और (कई) प्रतिबंध के बारे में जानकारी के लिए इस लेख देखें: http://technet.microsoft.com/en-us/library/cc917715.aspx

+0

इसका मतलब है, उपरोक्त दृश्य perfact है जैसा कि है ... इसे अब अनुकूलित नहीं किया जा सकता है – girish

+0

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

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