مرحبا مرة أخرى!
الزملاء ، في اليوم الأخير من شهر كانون الثاني (يناير) ، نطلق دورة
"MS SQL Server Developer" ، فيما يتعلق بالدرس الموضوعي المفتوح. تحدثنا فيه عن كيفية تنفيذ MS SQL Server لاستعلام SELECT ، ومناقشته بالترتيب وما تم تحليله ، وتراجعنا أيضًا في قراءة خطة الاستعلام.
محاضر -
كريستينا كوشروفا ، مهندس نماذج البيانات في سبيربنك في روسيا.
أهداف ومسار الندوةتم تحديد الأهداف التالية في بداية الندوة:
- تعرف على كيفية تنفيذ الخادم للطلب ، ولماذا يحدث هذا بهذه الطريقة.
- تعلم قراءة خطة الاستعلام.
لتحقيق ذلك ، أعد المعلم طريقًا بسيطًا وفعالًا:
لماذا أحتاج إلى خطة استعلام؟تعد خطة الاستعلام أداة مفيدة للغاية ، والتي ، للأسف ، لا يستخدمها كثير من المطورين. للوهلة الأولى ، قد يبدو أنه ليس من الضروري معرفة آليات الطلب. ومع ذلك ، إذا فهمت ما يحدث داخل SQL Server ، فيمكنك كتابة استعلام أكثر فاعلية. وسوف يساعد كثيرا ، على سبيل المثال ، أثناء التحسين.
كيف نرى استعلام SELECT؟لنرى كيف يبدو استعلام SELECT:
اختر [field1] ، [field2] ...
| ما هي الحقول التي نختارها؟
|
من [الجدول]
| من اين
|
أين [الشروط]
| أين الظروف
|
GROUP BY [field1]
| تجميع حسب الحقول
|
[شروط]
| وجود مثل هذه الشروط
|
الترتيب حسب [field1]
| الترتيب (فرز)
|
كيف نفهم أين تذهب للبيانات؟أول شيء يحاول الخادم فهمه عند وصول الطلب هو المكان الذي يجب أن يذهب إليه للحصول على البيانات. يجيب أمر FROM على هذا السؤال ، لأنه هنا سيكون لدينا قائمة بالجداول (أو اسم جدول واحد).
من أجل الوضوح ، دعنا نتخيل أن خادمنا هو نوع من الخدم ، الذين نطلب منهم جمعنا في إجازة. وفقًا لذلك ، يبدأ الخادم الشخصي في التفكير ، ولكن في أي خزانة هي الأشياء الضرورية (في أي جدول تحتاج إلى أخذ البيانات)؟ وحتى يتمكن خادمنا من إكمال مهمته بسهولة ، فإننا نستخدم FROM.
كيف نفهم ما البيانات التي يجب اتخاذها؟دعنا نقول بتلر وجد الخزانة الصحيحة وفتحه. ولكن ما الأشياء التي يجب اتخاذها؟ ربما نحن ذاهبون إلى منتجع للتزلج؟ أو ربما على شاطئ مشمس حار؟ لجعل الأشياء لدينا تطابق الطقس ، فإن أمر WHERE مفيد لنا ، والذي يحدد الشروط ، أي ، يسمح لنا بتصفية البيانات. إذا كان الجو حارًا ، فنحن نأخذ ألواحًا وقمصانًا وملابس سباحة ، وإذا كان الجو باردًا - القفازات والجوارب المحبوكة والكنزات الصوفية)).
والخطوة التالية هي إرفاق هذه البيانات بالمجموعات ، والتي تحدث مع GROUP BY (القمصان بشكل منفصل والجوارب بشكل منفصل). وفقًا لنتائج التجميع ، يمكن فرض شرط إضافي واحد باستخدام HAVING (على سبيل المثال ، التخلص من الأشياء غير المبررة). في النهاية ، نضيف كل شيء باستخدام ORDER BY ، والحصول على حقيبة الانتهاء من الأشياء في الإخراج ، أو بالأحرى ، كتلة البيانات المطلوبة.

بالمناسبة ، هناك فارق بسيط ، ولكنه يتكون في حقيقة أن هناك فرقًا في الشروط التي يجب أن تُكتب في أي مكان وفي أي منها. ولكن هذا هو الأفضل أن نرى في الفيديو.
نواصل. يتم حفظ مسار تنفيذ
الطلب كخطة طلب في ذاكرة التخزين المؤقت ، أي أن الخادم الشخصي يكتب كل شيء ، لأنه خادم شخصي جيد - ماذا لو كنت ترغب في تكرار طلبك العام القادم؟ ومثل هذه الخطط ، من حيث المبدأ ، قد تكون كثيرة.
أنواع الاتصالات في خطة الاستعلامهناك ثلاثة اتصالات قد تصادفك من حيث الاستعلام:
- حلقة متداخلة.
- دمج الانضمام.
- تجزئة الانضمام.
قبل الخوض في كل منها بمزيد من التفصيل ، دعونا نلخص لماذا يجب علينا حتى قراءة خطة الاستعلام. هذا في الواقع مفيد للغاية لأنك ستتعلم:
- أي مؤشر يستخدم ؛
- في أي ترتيب الانضمام.
- ما تم اختياره من المخزن المؤقت ؛
- كم ينفق الخادم الموارد على العملية ؛
- ما هو الفرق بين خطة افتراضية وخطة حقيقية.
حلقة متداخلةلنفترض أننا بحاجة إلى ربط البيانات من جداول مختلفة. دعنا نقدم هذه الطاولات على أنها ... كمية صغيرة من شوكولاتة Skittles وعبوات M&M الكاملة.

عند توصيل نوع Nested Loop ، نأخذ حلوى Skittles ، ثم نحصل على الحلوى الأعمى من حزمة M&M. إذا لم نواجه حلوى من نفس اللون (هذه هي حالتنا) ، فسنحصل على الحلوى التالية ، أي أن هناك تمثال نصفي معتاد. نتيجة لذلك ، يمكننا أن نقول أن اتصال حلقة متداخلة أكثر ملاءمة لكميات صغيرة من البيانات. من الواضح ، إذا كان هناك الكثير من البيانات ، فإن الخرق ليس هو الخيار الأفضل.

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


دمج الصلة جيد في الحالات التالية:
- مجموعات البيانات الكبيرة.
- نفس مجالات الاتصال من نفس النوع ؛
- حقول الاتصال لديها مؤشرات.
تجزئة الانضماميتم استخدام صلة التجزئة للكميات الكبيرة غير المصنفة من البيانات. للانضمام إلى الجداول في هذه الحالة ، تحتاج إلى إنشاء شيء يحاكي الفهرس.
تجزئة الانضمام مثال:

من أجل الوضوح ، نذكر الحلويات لدينا:

يتضمن استخدام Hash join مرحلتين من الإجراءات:
- بناء - تم بناء جدول التجزئة على أصغر الجدول. لكل قيمة في الجدول رقم 1 ، يتم اعتبار التجزئة. يتم تخزين القيمة في جدول التجزئة ، ويتم استخدام التجزئة المحسوب كمفتاح.
- دقق لكل صف من الجدول رقم 2 ، يتم حساب قيمة التجزئة للحقول المحددة في الصلة (عامل التشغيل =). يتم البحث في جدول التجزئة ، ويتم فحص قيم الحقول.



عندما ينضم تجزئة جيدة:
- مجموعة بيانات كبيرة
- لا فهارس هامشية.
نقطة مهمة: إذا لم يكن هناك ما يكفي من الذاكرة ، فسيذهب التسجيل إلى tempdb - إلى القرص.
الأصدقاء ، بالإضافة إلى ما سبق ، تضمن الدرس المفتوح أيضًا نقاطًا أخرى مثيرة للاهتمام ، والتي يمكن مشاهدتها بشكل أفضل من خلال مشاهدة الفيديو. نقترح زيارة
اليوم المفتوح للدورة التدريبية "MS SQL Server Developer" ، حيث يمكنك طرح الأسئلة على المعلم.
تشكر
الأستاذة كريستينا كوشروفا ، خيسوس شولتز بورلاند ، على عرضها
التقديمي مع خطط تنفيذ تنفيذ PASS Summitt: سر ضبط نجاح الاستعلام ، والذي تم استخدامه في إعداد الدرس المفتوح.