سؤال

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

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

select * from address where country_code = 'US' and city = 'New York'

إذا تم الآن تقسيم الجدول بواسطة "Country_Code" ، وأنا أعلم أنه سيتم الآن تنفيذ الاستعلام فقط على القسم الذي يحتوي على Country_Code = US. سؤالي هو هل أحتاج إلى تحديد القسم بشكل صريح للاستعلام في بيان SQL الخاص بي؟ أو ما زلت أستخدم العبارة السابقة وسيقوم خادم DB بتحسينه تلقائيًا؟

شكرا مقدما!

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

المحلول

التقسيم شفاف لأي استفسارات تكتبها. ليست هناك حاجة لتحديد القسم للاستعلام.

تستخدم قاعدة البيانات فقط الأقسام تحتها لتحسين وفقًا لذلك ومثالية تقليل كمية البيانات أو الفهارس التي تحتاجها للبحث من خلالها بناءً على الفقرة.

نصائح أخرى

إجابة Jarod صحيحة وتجيب تمامًا على السؤال ، لكنني أعتقد أن هناك قطعة مهمة مفقودة.

إذا لم يتضمن استعلامك حالة مرشح في عمود التقسيم ، فمن المحتمل أن ترى أداءً أسوأ مما تفعل على جدول غير مقترح من نفس الحجم.

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

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

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