تفاوت بین UNION و UNION ALL در چیست؟

mohsen3 هفته قبل
ارسال شده در
sql

در SQL، UNION و UNION ALL برای ترکیب نتایج دو یا چند پرس و جوی مختلف استفاده می‌شوند، اما در نحوه‌ی مدیریت ردیف‌های تکراری با یکدیگر تفاوت دارند.

UNION به طور خودکار ردیف‌های تکراری را از نتایج حذف می‌کند. این به این معنی است که اگر ردیف‌های مشابهی در دو مجموعه‌ی نتیجه وجود داشته باشد، تنها یک بار در نتیجه نهایی نشان داده می‌شوند. عملکرد این دستور معمولاً به دلیل نیاز به شناسایی و حذف تکراری‌ها، می‌تواند کندتر باشد. در بیشتر سیستم‌های پایگاه داده، برای حذف تکراری‌ها نیاز به یک فرآیند مرتب‌سازی وجود دارد، که این خود تأثیر مستقیمی بر عملکرد و زمان اجرا دارد.

به عنوان مثال:

      SELECT 'foo' AS bar
UNION
SELECT 'foo' AS bar

    

نتیجه:

      +-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)

    

از سوی دیگر، UNION ALL ردیف‌های تکراری را حذف نمی‌کند و تمام نتایج را به صورت یکجا ترکیب می‌کند. این به معنای آن است که اگر داده‌ها در هر دو پرس و جو یکسان باشند، هر دو ردیف در نتایج نهایی نمایش داده خواهند شد، که این امر باعث می‌شود که UNION ALL معمولاً سریع‌تر از UNION باشد.

به عنوان مثال:

      SELECT 'foo' AS bar
UNION ALL
SELECT 'foo' AS bar

    

نتیجه:

      +-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)

    

برای استفاده از UNION و UNION ALL، باید توجه کرد که تمام ستون‌های انتخاب شده باید از نوع داده‌ای یکسان باشند، در حالی که استاندارد SQL به این نکته اشاره دارد که توصیف‌گرهای ستون‌های مربوطه (column descriptor) باید یکسان باشند حتی اگر نام‌ها متفاوت باشند. این امر می‌تواند در برخی از پایگاه‌های داده به طور خاص بر روی عملکرد اثر بگذارد.

در نهایت، انتخاب بین UNION و UNION ALL بستگی به نیاز شما به حذف داده‌های تکراری و همچنین کمیت و نوع داده‌های مورد نظر دارد.

رای
0
ارسال نظر
مرتب سازی:
اولین نفری باشید که نظر می دهید!