SQL Server 2008 الانضمام إلى تلميحات
-
20-09-2019 - |
سؤال
في الآونة الأخيرة، كنت أحاول تحسين هذا الاستعلام
UPDATE Analytics
SET UserID = x.UserID
FROM Analytics z
INNER JOIN UserDetail x ON x.UserGUID = z.UserGUID
تظهر خطة التنفيذ المقدرة 57٪ على تحديث الجدول و 40٪ على مباراة التجزئة (الإجمالية). فعلت بعض الطفولات التي جاءت ورأت موضوع الانضمام إلى تلميحات. لذلك أضفت حلقة تلميح لانضمام Inner و Wa-Zham! تعرض خطة التنفيذ الجديدة 38٪ على تحديث الجدول و 58٪ على الفهرس يسعى.
لذلك كنت على وشك البدء في تطبيق حلقة تلميحات لجميع استفساراتي حتى تحصل الحكمة على أفضل مني. بعد بعض googling، أدركت أن الانضمام إلى تلميحات ليست مغطاة بشكل جيد للغاية بول. وبعد لذلك...
- يمكن للشخص من فضلك قل لي لماذا تطبيق حلقة تلميحات لجميع استفساراتي هي فكرة سيئة. قرأت في مكان ما أن الانضمام الحلقة هو طريقة الانضمام الافتراضية للحصول على optimiser الاستعلام ولكنها تعذر التحقق من صحة البيان؟
- متى تشترك تلميحات المستخدمة؟ عندما يضرب SH * T المروحة والشبح المغشفي أليس في المدينة؟
- ما هو الفرق بين حلقة، التجزئة ودمج تلميحات؟ الدول BOL التي تندمج تبدو أبطأ ولكن ما هو تطبيق كل تلميح؟
شكرا على وقتك ومساعدة الناس!
أنا أركيز SQL Server 2008 BTW. الإحصائيات المذكورة أعلاه هي خطط التنفيذ المقدرة.
المحلول
يمكن للشخص من فضلك قل لي لماذا تطبيق حلقة تلميحات لجميع استفساراتي هي فكرة سيئة. قرأت في مكان ما أن الانضمام الحلقة هو طريقة الانضمام الافتراضية للحصول على optimiser الاستعلام ولكنها تعذر التحقق من صحة البيان؟
لأن هذا يسلب محسن الفرصة للنظر في طرق أخرى يمكن أن تكون أكثر كفاءة.
متى تشترك تلميحات المستخدمة؟ عندما يضرب SH * T المروحة والشبح المغشفي أليس في المدينة؟
عندما يكون توزيع البيانات (الذي يجعل المحسن قراراته) منحرفة شديدة والإحصائيات ليست قادرة على تمثيلها بشكل صحيح.
ما هو الفرق بين حلقة، التجزئة ودمج تلميحات؟ الدول BOL التي تندمج تبدو أبطأ ولكن ما هو تطبيق كل تلميح؟
هذه خوارزميات مختلفة.
LOOP
يتم اختراق الحلقات: لكل سجل من الجدول الخارجي، يتم البحث في الجدول الداخلي للمباريات (باستخدام فهرس المتاحة). الأسرع عندما مجرد جزء صغير من السجلات من كلا الجدولين يفيJOIN
و الWHERE
الظروف.MERGE
فرز كلا الجداول يتم عبورها في ترتيب الفرز، تخطي السجلات التي لا مثيل لها. الأسرع لFULL JOIN
S وعندما يتم فرز كل من السجلات بالفعل (من عمليات الفرز السابقة أو عند استخدام مسار الوصول الفهرس)HASH
بناء طاولة تجزئة في التخزين المؤقت (الذاكرة أوtempdb
) من أحد الجداول ويبحث عنه لكل سجل من الآخر. أسرع إذا كان الجزء الكبير من السجلات من أي جدول يطابقWHERE
وJOIN
شرط.
نصائح أخرى
تظهر خطة التنفيذ المقدرة 57٪ على تحديث الجدول و 40٪ على مباراة تجزئة (إجمالية). فعلت بعض الطفولات التي جاءت ورأت موضوع الانضمام إلى تلميحات. لذلك أضفت حلقة تلميح لانضمام Inner و Wa-Zham! تعرض خطة التنفيذ الجديدة 38٪ على تحديث الجدول و 58٪ على الفهرس يسعى.
بالتأكيد يعني أن الخطة المقترحة أسوأ؟ على افتراض أن تحديث الجدول يأخذ وقتا ثابتا هو الآن يجري الآن تكلفة نشاط الفهرس.