في SQL، يمكن تحديد الصفوف الموجودة في جدول واحد ولكنها غير موجودة في جدول آخر باستخدام "ليست في" مشغل. ومع ذلك، قد يؤدي هذا الأسلوب في بعض الأحيان إلى مشكلات في الأداء لمجموعات البيانات الكبيرة.
فكر في سيناريو حيث يكون لديك جدولان، A وB، لهما نفس المفاتيح الأساسية. لتحديد كافة الصفوف من A غير الموجودة في B، يمكنك استخدام الاستعلام التالي:
SELECT *
FROM A
WHERE NOT EXISTS (
SELECT *
FROM B
WHERE A.pk = B.pk
);
أثناء عمل هذا الاستعلام، قد يكون غير فعال، خاصة بالنسبة للجداول الكبيرة. يجب أن تقوم قاعدة البيانات بإجراء استعلام متداخل لكل صف في A، والتحقق من وجودها في B.
الطريقة الأفضل هي استخدام صلة أيسر وتصفية النتائج بناءً على القيم الخالية. تتضمن هذه الطريقة ضم A وB في عمود مشترك ثم تحديد صفوف من A حيث يكون العمود المقابل في B خاليًا:
SELECT A.*
FROM A
LEFT JOIN B
ON A.x = B.y
WHERE B.y IS NULL;
ينفذ هذا الاستعلام عملية ربط واحدة ويقوم بتصفية النتائج بناءً على عدم وجود قيمة في B. وعادةً ما يكون أسرع من النهج "NOT IN" لمجموعات البيانات الكبيرة.
بدلاً من ذلك، يمكنك استخدام استعلام فرعي في جملة WHERE:
SELECT A.*
FROM A
WHERE x NOT IN (
SELECT y
FROM B
);
يمكن أن يوفر هذا الأسلوب أيضًا أداءً جيدًا لمجموعات البيانات الكبيرة.
في النهاية، تعتمد أفضل طريقة لتحسين الاستعلام على البيانات المحددة وتكوين قاعدة البيانات. يوصى باختبار طرق مختلفة واختيار الطريقة التي توفر الأداء الأمثل لاستعلامك.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3