سؤال

كتمرين (قراءة: سؤال مقابلة) في تحسين الفهرس ، أحتاج إلى استعلام بطيء في قاعدة بيانات AdventureWorks القياسية في SQL2005. جميع الاستعلامات التي حاولت استغرقت حوالي ثانية واحدة وأفضل الحصول على استعلام يستغرق عدة ثوان بحيث يمكن تحسينه بفعالية.

هل يمكن لأي شخص هنا إنشاء مثل هذا الاستعلام أو يعطيني مؤشرات لكيفية إنشاء استعلام بطيء؟ لا يمكنني أن أجعل استفساراتي غير مثبتة :)

هل كانت مفيدة؟

المحلول

هنا لديك قائمة بجداول قاعدة البيانات مع معظم الصفوف:

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

انضمام داخلي على الجداول غير المثيرة. مثال اصطناعي للغاية ، ولكن في الوقت الحالي ، يستغرق الأمر أكثر من دقيقتين على الجهاز. الآن - أكثر من 20 دقيقة. حاليا - 1H 20 دقيقة.

نصائح أخرى

حاول استخدام الاستعداد الفرعي المربوطة ضد أحد تلك الجداول أو المؤشر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top