اذهب إلى المحتوى
  • 0

ما الفرق في استخدام IN و JOIN عند التعامل مع جداول بعدد كبير من الأسطر SQL

سعيد يوسف

السؤال

Recommended Posts

  • 1

في البداية لاحظ أن

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، لذا فان حتى السرعة قد تتوقف على كيفية استخدامك لها ونوع بياناتك.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

كﻻ الإستعﻻمين يُعطي نفس النتيجة, ولكن الطريقة الأولى هي الأكثر قرباً للغة المنطق والأسهل في الكتابة

ولكن إن قمنا بالمقارنة من حيث الأداء ففي أغلب الأوقات ستجد أن الإستعﻻمة الثانية(بإستخدام الjoin) تكون أسرع وتفوز من ناحية الأداء, وذلك لأن الexecution plan(سلسلة الخطوات المُتبعة عند تنفيذ إستعﻻمة ) في الjoin عادةً تكون أكثر فاعلية حيث يتم إستخدام خوارزميات معينة لضمان الحصول على أقل كمية من البيانات الغير مهمة ولضمان تسريع عملية البحث , بينما عند إستخدام الsubquery ما يحدث هو أن كل البيانات المتضمنة في الإستعﻻمة الداخلية(subquery) يتم جلبها مما يؤثر على أداء قاعدة البيانات

مؤخراً يتم تحسين الquery optimizer لأغلب قواعد البيانات ويتم سد تلك الفجوة في الأداء بشكلٍ ملحوظ, ولكن بشكلٍ عام فإن الjoin أسرع ويتم إعتبارها الطريقة الطبيعية لتنفيذ ذلك النوع من الإستعﻻمات, حتى إن في كثيرٍ من الأوقات عند كتابة الsubquery فما يحدث خلف الكواليس هو أن قاعدة البيانات تقوم بتحويل تلك الsub query إلى جملة join مما يعني أن الjoin تُوفر عدداً من الخطوات بغرض تحسين الأداء 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...