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

أحاول عمل الدمج بين عدد كبير من الجداول join multiple tables ولكن الاستعلام بطيئ جداً كيف أسرعه SQL

فاديا جميل

السؤال

Recommended Posts

  • 1

إن كان عدد الجداول  كبير، هنا كل عملية دمج سوف ينتج عنها جدول جديد يحوي عمود إضافي ناتج عن الدمج السابق وبهذا يصبح عبئ في عمل مدير قواعد البيانات، لذلك في هذه الحالة نستخدم الاستعلامات الفرعية بدل الدمج، حيث أن كل استعلام فرعي يجلب نتيجة من جدول ما، مع تحقيق الربط باستخدام 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

يمكنك استخدام الشكل التالي عوضا عن الطريقة التقليدية لتحسين الأداء:

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

 

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...