سؤال

لدي استفسارين أنا UNIONمعا لدرجة أنني أعرف بالفعل أنه لن يكون هناك عناصر مكررة بين الاستعلامات. وبالتالي، UNION و UNION ALL سوف تنتج نفس النتائج.

أي واحد يجب أن أستخدم؟

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

المحلول

يجب عليك استخدام الشخص الذي يطابق نية ما تبحث عنه. إذا كنت ترغب في التأكد من عدم استخدام التكرارات UNION, ، وإلا استخدم UNION ALL. فقط لأن بياناتك ستنتج نفس النتائج فى الحال لا يعني ذلك دائمًا.

هكذا قال، UNION ALL سيكون أسرع في أي تطبيق قاعدة بيانات عاقل ، راجع المقالات أدناه للحصول على أمثلة. ولكن عادة ، فهي نفسها باستثناء ذلك UNION يؤدي خطوة إضافية لإزالة الصفوف المتطابقة (كما قد يتوقع المرء) ، وقد يميل إلى السيطرة على وقت التنفيذ.

نصائح أخرى

أرى أنك قمت بتمييز أداء السؤال هذا ، لذلك أفترض أن هذا هو اعتبارك الأساسي.

UNION ALL سوف يتفوق تماما UNION نظرًا لأن SQL لا تضطر إلى التحقق من المجموعتين لـ DUPs.

ما لم تكن بحاجة إلى SQL لإجراء فحص مكرر لك ، استخدم دائمًا UNION ALL.

وفق http://blog.sqlauthority.com/2007/03/10/sql-server-union-vs-ull-hich-is-better-for-performance/ على الأقل بالنسبة للأداء ، من الأفضل استخدام الاتحاد كله ، لأنه لا يتميز بفعالية التكرارات وبالتالي فهو أسرع

سأستخدم UNION ALL على أي حال. بالرغم من أنت اعلم أنه لن يكون هناك تكرارات ، اعتمادًا على محرك خادم قاعدة البيانات ، قد لا يعرف ذلك.

لذلك ، فقط لتوفير معلومات إضافية لخادم DB ، من أجل مخطط الاستعلام الخاص به خيار أفضل (ربما) ، الاستخدام UNION ALL.

بعد قول ذلك ، إذا خادم DBمخطط الاستعلام ذكي بما يكفي لاستنتاج أن المعلومات من UNION فهارس البند والجدول ، ثم يجب أن تكون النتائج (الأداء والحكمة الدلالية) هي نفسها.

في كلتا الحالتين ، يعتمد بشدة على خادم DB انت تستخدم.

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

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