it-swarm.asia

أساسيات خطة التنفيذ - تشويش المباراة

لقد بدأت في تعلم خطط التنفيذ وأنا مرتبك حول كيفية عمل مطابقة التجزئة بالضبط ولماذا سيتم استخدامها في صلة بسيطة:

select Posts.Title, Users.DisplayName
From Posts JOIN Users on
Posts.OwnerUserId = Users.Id
OPTION (MAXDOP 1)

enter image description here

كما أفهمها ، فإن نتائج مسح الفهرس العلوي تصبح تجزئة قادرة على البحث عن كل صف في الجزء السفلي من الفهرس المجمع. أفهم كيف تعمل جداول التجزئة إلى حد ما على الأقل ، لكني مرتبك بشأن القيم التي يتم تجزئتها بالضبط في مثال مثل هذا.

ما الذي يعقلني هو أنه تم تجزئة الحقل المشترك بينهما ، المعرّف - ولكن إذا كان هذا هو الحال ، فلماذا يتم تجزئة الرقم؟

41
Kyle Brandt

كما يقتبس إجابة SQLRockstar

الأفضل للمدخلات الكبيرة التي لم يتم فرزها.

الآن،

  • من فحص فهرس Users.DisplayName (يفترض عدم تجميعها) تحصل على Users.Id (بافتراض تجميع) = غير مفروز
  • أنت تقوم أيضًا بمسح المشاركات الخاصة بـ OwnerUserId = غير مرتبة

هذا 2 مدخلات غير مرتبة.

سأفكر في فهرس في جدول المنشورات على OwnerUserId ، بما في ذلك العنوان. هذا سيضيف بعض الطلب على جانب واحد من المدخلات إلى JOIN + سيغطي المؤشر

CREATE INDEX IX_OwnerUserId ON Posts (OwnerUserId) INCLUDE (Title)

قد تجد بعد ذلك أن فهرس Users.DisplayName لن يتم استخدامه وسوف يقوم بفحص PK بدلاً من ذلك.

31
gbn

من http://sqlinthewild.co.za/index.php/2007/12/30/execution-plan-operations-joins/

"صلة التجزئة هي واحدة من عمليات الانضمام الأكثر تكلفة ، لأنها تتطلب إنشاء جدول تجزئة لإجراء عملية الربط. ومع ذلك ، فإن الصلة هي الأفضل للمدخلات الكبيرة وغير المفرزة. وهي الأكثر استهلاكًا للذاكرة من أي الصلات

يقوم رابط التجزئة أولاً بقراءة أحد المدخلات ويجزئ عمود الربط ويضع التجزئة الناتجة وقيم العمود في جدول تجزئة مدمج في الذاكرة. ثم يقرأ جميع الصفوف في الإدخال الثاني ، ويجزئها ويتحقق من الصفوف في دلو التجزئة الناتج لصفوف الانضمام. "

الذي يربط هذا المنصب:

http://blogs.msdn.com/b/craigfr/archive/2006/08/10/687630.aspx

HTH

14
SQLRockstar

تتمثل ميزة تجزئة حقل رقمي في أنك تأخذ قيمة أكبر وتقسمها إلى قطع أصغر بحيث يمكن وضعها في جدول تجزئة.

إليك كيف يصفها جرانت فريتشي:

"جدول التجزئة ، من ناحية أخرى ، هو بنية بيانات تقسم جميع العناصر إلى فئات متساوية الحجم ، أو مجموعات ، للسماح بالوصول السريع إلى العناصر. تحدد وظيفة التجزئة أي مجموعة عناصر تدخل. على سبيل المثال ، يمكنك أخذ صف من جدول ، وتجزئة التجزئة إلى قيمة تجزئة ، ثم تخزين قيمة التجزئة في جدول تجزئة ".

يمكنك أيضًا الحصول على نسخة مجانية من كتابه الإلكتروني "تشريح خطط تنفيذ SQL Server" من رابط من المقالة التالية:

المصدر: http://www.simple-talk.com/sql/performance/graphical-execution-plans-for-simple-sql-queries/

9
Jeff