2009-09-10 11 views
5

पर एक धीमी क्वेरी की आवश्यकता है इंडेक्स ऑप्टिमाइज़ेशन में एक अभ्यास (पढ़ें: साक्षात्कार प्रश्न) के रूप में, मुझे एक क्वेरी की आवश्यकता है जो SQL2005 में मानक AdventureWorks डेटाबेस पर धीमा है। मैंने जिन सभी प्रश्नों का प्रयास किया है, वे लगभग 1 सेकंड लेते हैं और मैं एक क्वेरी करना पसंद करूंगा जो कई सेकंड लेता है ताकि इसे प्रभावी ढंग से अनुकूलित किया जा सके।मुझे एडवेंचरवर्क्स (एसक्यूएल 2005)

क्या कोई यहां ऐसी क्वेरी बना सकता है या धीमी क्वेरी बनाने के लिए मुझे पॉइंटर्स दे सकता है? मैं बस अपना प्रश्नों गैर performant बनाने के लिए नहीं कर पा रहे :)

+2

समयपूर्व डी-ऑप्टिमाइज़ेशन सभी की जड़ है ... –

उत्तर

9

यहाँ आप सबसे पंक्तियों के साथ डेटाबेस तालिकाओं की सूची है:

Tables - Rows count 
Sales.SalesOrderDetail - 121317 
Production.TransactionHistory - 113443 
Production.TransactionHistoryArchive - 89253 
Production.WorkOrder - 72591 
Production.WorkOrderRouting - 67131 
Sales.SalesOrderHeader - 31465 
Sales.SalesOrderHeaderSalesReason - 27647 
Person.Contact - 19972 
Person.Address - 19614 
Sales.CustomerAddress - 19220 
Sales.Customer - 19185 
Sales.ContactCreditCard - 19118 
Sales.CreditCard - 19118 
Sales.Individual - 18484 
Sales.CurrencyRate - 13532 

आपको लगता है कि तालिकाओं का उपयोग विभिन्न रूपों की कोशिश कर सकते हैं। उदाहरण के लिए यह प्रश्न:

SELECT * FROM Sales.SalesOrderDetail s 
INNER JOIN Production.Product p ON s.ProductID = p.ProductID 

मेरे कंप्यूटर पर 9 सेकंड के लिए चलता है।

आप इस चला सकते हैं:

SELECT * FROM Production.TransactionHistory th 
INNER JOIN Production.TransactionHistoryArchive tha ON th.Quantity = tha.Quantity 

इनर unindexed टेबल पर शामिल हो। बहुत कृत्रिम उदाहरण है, लेकिन अभी के लिए मेरी मशीन पर रोल करने में 2 मिनट लगते हैं। अब - 20 मिनट से अधिक। अब - 1h 20 मिनट

+0

इससे भी बेहतर, एक "अनुक्रमित सूची> 1000" या कुछ, एक अनुक्रमित कॉलम पर जोड़ें। – BradC

+0

@ लुकाज़ - क्वेरी 9 सेकंड (मेरी मशीन पर 3) के लिए चलती है क्योंकि यह 100000 से अधिक पंक्तियां लौटाती है, न कि क्योंकि यह टेबल स्कैन करने की कोशिश में व्यस्त है। दोनों टेबलों में पहले से ही उत्पाद आईडी पर इंडेक्स हैं इसलिए मैं इतना सुधार नहीं कर सका। – rein

+0

@BradC - यह सही दृष्टिकोण है (अन-अनुक्रमित कॉलम द्वारा फ़िल्टरिंग या बेहतर अभी तक, अन-अनुक्रमित कॉलम द्वारा जुड़ना) लेकिन दुर्भाग्य से मैं केवल उस बिंदु पर नहीं पहुंच सकता जहां मुझे वह खराब प्रदर्शन देता है जिसे मैं ढूंढ रहा हूं । – rein

0

उन तालिकाओं या कर्सर में से किसी एक के विरुद्ध उपयोग से संबंधित सबक्वायरी का प्रयास करें।

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