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

ما الفرق بين عمل SQL JOIN وجلب النتيجة كجدول كبير وبين دمج الجداول في لغة البرمجة بعد عمل استعلامات خاصة لكل جدول أو جزء من البيانات

فاديا جميل

السؤال

Recommended Posts

  • 1

إن قواعد البيانات العلائقية والتي تعتمد على SQL مبنية بطريقة مٌحسّنة لعمل دمج بين الجداول وبطريقة سريعة وأقل استهلاك للموارد، مثلا قواعد البيانات لديها مفهوم الفهرسة وتعمل بحث وربط القيم بسرعة كبيرة وأفضل من البحث الخطي في لغة البرمجة بعد جلب الاستعلام كما أن الربط بالمفتاح الأجنبي بين الجداول يسرع الدمج كما يوجد query optimizer يأخذ الاستعلام الذي يكتبه المبرمج ويعدل عليه ليصبح أسرع.

بالإضافة لذلك، الحصول على النتيجة النهائية من قاعدة البيانات تقلل من حجم البيانات المرسل عبر الاتصال و الشبكة في حال أن المخدم الخاص بالمشروع (مخدم الويب web server) بعيد عن مدير قاعدة البيانات RDBM أي يحتاج لاتصال انترنت.

ولا يوجد داعي لتحميل كامل البيانات في ذاكرة المخدم أو العميل ثم عمل فلترة للنتائج، لأن هذا يضعف الأداء.

نقاط مهمة للأداء:

  • حجم ذاكرة مدير قاعدة البيانات (إن كانت صغيرة أو استضافة مشتركة يمكن عمل الربط في المخدم)
  • سرعة الشبكة بين قاعدة البيانات والسيرفر (إن كان حجم الجداول الفعلي صغير يمكن نقلهم عبر الشبكة للمخدم ثم الربط)
  • إن كان أداء مخدم قاعدة البيانات سيئاً وأدى لأن تصبح قاعدة البيانات لديك bottleneck لابأس من نقل المعالجة للمخدم
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

جلب النتيحة من قاعدة البيانات مباشرةً عبر الsql join يُعد أفضل وذلك إعتماداً على عدد من الأسباب مثل

  1. المكان الطبيعي للتعامل مع البيانات هو قواعد البيانات فﻻ يجب أن أن نجعل الخادم يقوم بتلك المهمة بدلاً عن قاعدة البيانات حتى ﻻ نخالف قاعدة المسؤلية الواحدة" Single responsibility" ويكون كل جزأ في المشروع يقوم بوظيفته
  2. يكون الأمر منطقياً أكثر عند تنفيذه بإستعﻻمة واحدة ويكون الشفرة البرمجية قابلة للقراءة بشكل أفضل
  3. يكون الأداء أفضل وأوفر للموارد حيث ﻻ تحتاج أن ترسل طلبات مختلفة إلى قاعدة البيانات كل مرة, بل تقوم بإرسال طلب واحد مما يُزيد الأداء ويوفر الموارد
  4. تقوم قاعدة البيانات بإستخدام مُحسن الإستعﻻمات(query optimizer) بتنفيذ الإستعﻻمة الواحدة بطريقة فعالة أفضل , فمثلاً عند تنفيذ جملة تقوم بجلب بيانات الموظفين في قسم معين 
    select * from employee inner join department  using ssn

    ستقوم قاعدة البيانات بإستخدام الفهرسة(indexing) جلب البيانات فقط التي تحتوي ع المفتاح ssn , بينما عند تنفيذ نفس الوظيفة عبر جملتين مختلفتين وربطهم بلغة الخادم(php, c#. java) ستضطر إلى جلب جميع البيانات ومن ثم فلترتها مما يعني تنفيذ عمليات أكثر

  5. يمكن أن نأخذ مثالاً أخر 

    SELECT
    	e.fname,
    	e.lname
    FROM
    	employee e
    WHERE
    	EXISTS (
    		SELECT
    			1
    		FROM
    			payment
    		WHERE
    			payment.emp_id = emp.id
    	);

    تلك الجملة تقوم بإرجاع بيانات الموظفين الذين لهم عمليات دفع , هنا تقوم قاعدة البيانات بتنفيذ الجملة الداخلية أولاً ومن ثم تقوم جلب البيانات التي تتطابق فقط مع الجملة الداخلية, إن قمنا بتنفيذها عبر عدة جمل وربطها بلغات البرمجة سنضطر إلى جلب البيانات كلها ومن ثم فلترتها مثل المثال السابق مما يعني عمليات أكثر

وبوجهٍ عام في قواعد البيانات يُفضل أغلب الأوقات أن تقوم بتنفيذ الإستعﻻمات عبر جملة واحدة 

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...