فاديا جميل نشر 16 أكتوبر 2021 أرسل تقرير نشر 16 أكتوبر 2021 لدي عدد من الجداول أحاول الربط بينهم عن طريق id وجلب قيمة عمود الاسم من كل منهم ولكنه يأخذ الكثير من الوقت، كيف أحل المشكلة 2 اقتباس
1 Wael Aljamal نشر 16 أكتوبر 2021 أرسل تقرير نشر 16 أكتوبر 2021 إن كان عدد الجداول كبير، هنا كل عملية دمج سوف ينتج عنها جدول جديد يحوي عمود إضافي ناتج عن الدمج السابق وبهذا يصبح عبئ في عمل مدير قواعد البيانات، لذلك في هذه الحالة نستخدم الاستعلامات الفرعية بدل الدمج، حيث أن كل استعلام فرعي يجلب نتيجة من جدول ما، مع تحقيق الربط باستخدام WHERE أي بدل عمل التالي: SELECT table1_id, -- مكرر وهو عمود الربط table2_name, -- جلب حقل الاسم من باقي الجداول table3_name, table4_name, table5_name, table6_name, table7_name, table8_name, table9_name FROM table1 LEFT JOIN table2 ON (table2_id = table1_id) LEFT JOIN table3 ON (table3_id = table1_id) LEFT JOIN table4 ON (table4_id = table1_id) LEFT JOIN table5 ON (table5_id = table1_id) LEFT JOIN table6 ON (table6_id = table1_id) LEFT JOIN table7 ON (table7_id = table1_id) LEFT JOIN table8 ON (table8_id = table1_id) LEFT JOIN table9 ON (table9_id = table1_id) نبدله بالتالي: SELECT table1_id, (select table2_name from table2 where table1_id = table2_id), (select table3_name from table3 where table1_id = table3_id), (select table4_name from table4 where table1_id = table4_id), (select table5_name from table5 where table1_id = table5_id), (select table6_name from table6 where table1_id = table6_id), (select table7_name from table7 where table1_id = table7_id), (select table8_name from table8 where table1_id = table8_id), (select table9_name from table9 where table1_id = table9_id) FROM table1 تعتبر هذه من الحالات التي يكون فيها أداء SubQuery أسرع من عمل JOIN 1 اقتباس
-1 Ahmed Sharshar نشر 16 أكتوبر 2021 أرسل تقرير نشر 16 أكتوبر 2021 يمكنك استخدام الشكل التالي عوضا عن الطريقة التقليدية لتحسين الأداء: SELECT t1_id, (select t2_name from t2 where t1_id = t2_id), (select t3_name from t3 where t1_id = t3_id), (select t4_name from t4 where t1_id = t4_id), (select t5_name from t5 where t1_id = t5_id), (select t6_name from t6 where t1_id = t6_id), (select t7_name from t7 where t1_id = t7_id), (select t8_name from t8 where t1_id = t8_id), (select t9_name from t9 where t1_id = t9_id) FROM t1 كذلك يمكنك فعلها بشكل منفصل هكذا: select ... from t1 innerjoin t2 on t1.pk=t2.fk leftjoin t3 on t1.pk=t3.fk أو يتجميع كافة الاختيارات أولا قبل عملية التجميع join بحيث يكون البحث أسرع هكذا: SELECT a.month, a.roadTypeID, a.speed, a.pid, a.or, b.pid, b.or, c.pid, c.or, d.pid, d.or, e.pid, e.or, f.pid, f.or, g.pid, g.or, h.pid, h.or, i.pid, i.or, j.pid, j.or, k.pid, k.or, l.pid, l.or, m.pid, m.or, n.pid, n.or, o.pid, o.or, p.pid, p.or, q.pid, q.or, r.pid, r.or, s.pid, s.or, t.pid, t.or, u.pid, u.or, v.pid, v.or FROM wspeed2 a JOIN wspeed3 b on a.speed = b.speed JOIN wspeed20 c on a.speed = c.speed JOIN wspeed24 d on a.speed = d.speed JOIN wspeed25 e on a.speed = e.speed JOIN wspeed26 f on a.speed = f.speed JOIN wspeed27 g on a.speed = g.speed JOIN wspeed63 h on a.speed = h.speed JOIN wspeed65 i on a.speed = i.speed JOIN wspeed68 j on a.speed = j.speed JOIN wspeed69 k on a.speed = k.speed JOIN wspeed70 l on a.speed = l.speed JOIN wspeed71 m on a.speed = m.speed JOIN wspeed72 n on a.speed = n.speed JOIN wspeed73 o on a.speed = o.speed JOIN wspeed74 p on a.speed = p.speed JOIN wspeed75 q on a.speed = q.speed JOIN wspeed76 r on a.speed = r.speed JOIN wspeed77 s on a.speed = s.speed JOIN wspeed78 t on a.speed = t.speed JOIN wspeed81 u on a.speed = u.speed JOIN wspeed82 v on a.speed = v.speed اقتباس
السؤال
فاديا جميل
لدي عدد من الجداول أحاول الربط بينهم عن طريق id وجلب قيمة عمود الاسم من كل منهم ولكنه يأخذ الكثير من الوقت، كيف أحل المشكلة
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.