إلى الاتحاد أو الاتحاد ، هذا هو السؤال
-
29-09-2019 - |
سؤال
لدي استفسارين أنا 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 جميعها ستشكل المهمة بشكل أكثر كفاءة.