سعيد يوسف نشر 20 أكتوبر 2021 أرسل تقرير نشر 20 أكتوبر 2021 ما الفرق بين الاستعلامين: SELECT * FROM T1 WHERE T1.col IN (SELECT col FROM T2) وهذا: SELECT T1.* FROM T1 JOIN T2 ON T1.col = T2.col 1 اقتباس
0 شرف الدين حفني نشر 20 أكتوبر 2021 أرسل تقرير نشر 20 أكتوبر 2021 كﻻ الإستعﻻمين يُعطي نفس النتيجة, ولكن الطريقة الأولى هي الأكثر قرباً للغة المنطق والأسهل في الكتابة ولكن إن قمنا بالمقارنة من حيث الأداء ففي أغلب الأوقات ستجد أن الإستعﻻمة الثانية(بإستخدام الjoin) تكون أسرع وتفوز من ناحية الأداء, وذلك لأن الexecution plan(سلسلة الخطوات المُتبعة عند تنفيذ إستعﻻمة ) في الjoin عادةً تكون أكثر فاعلية حيث يتم إستخدام خوارزميات معينة لضمان الحصول على أقل كمية من البيانات الغير مهمة ولضمان تسريع عملية البحث , بينما عند إستخدام الsubquery ما يحدث هو أن كل البيانات المتضمنة في الإستعﻻمة الداخلية(subquery) يتم جلبها مما يؤثر على أداء قاعدة البيانات مؤخراً يتم تحسين الquery optimizer لأغلب قواعد البيانات ويتم سد تلك الفجوة في الأداء بشكلٍ ملحوظ, ولكن بشكلٍ عام فإن الjoin أسرع ويتم إعتبارها الطريقة الطبيعية لتنفيذ ذلك النوع من الإستعﻻمات, حتى إن في كثيرٍ من الأوقات عند كتابة الsubquery فما يحدث خلف الكواليس هو أن قاعدة البيانات تقوم بتحويل تلك الsub query إلى جملة join مما يعني أن الjoin تُوفر عدداً من الخطوات بغرض تحسين الأداء 1 اقتباس
1 Ahmed Sharshar نشر 20 أكتوبر 2021 أرسل تقرير نشر 20 أكتوبر 2021 في البداية لاحظ أن SELECT a.* FROM a JOIN b ON a.col = b.col ليست نفسها: SELECT a.* FROM a WHERE col IN ( SELECT col FROM b ) الا اذا b.col كان فريدا في كل حالة، لذا احذر عند استخدامها اذ قد يؤدوا الى نواتج مختلفة. اما اذا أردت شيئا يعطي نفس نتيجة الاستعلام الأول: SELECT a.* FROM a JOIN ( SELECT DISTINCT col FROM b ) ON b.col = a.col اما بالنسبة للأداء فإن join عادة ما تكون أسرع في التنفيذ، ليس بفارق كبير على أي حال، لكنها قد تكون أبطأ اذا كانت الجداول غير مفهرسة non-indexed tables، لذا فان حتى السرعة قد تتوقف على كيفية استخدامك لها ونوع بياناتك. 1 اقتباس
السؤال
سعيد يوسف
ما الفرق بين الاستعلامين:
SELECT * FROM T1 WHERE T1.col IN (SELECT col FROM T2)
وهذا:
SELECT T1.* FROM T1 JOIN T2 ON T1.col = T2.col
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.