لماذا يسبب التجميع في مسمة فرعية المشاكل
-
21-09-2019 - |
سؤال
عندما أقوم بتضمين الخطين المعلقين في الاستماع الفرعي التالي ، يبدو أن الأمر يستغرق إلى الأبد حتى يحصل خادم Sybase 12.5 ASE على أي نتائج. بدون هذين الخطين ، يعمل الاستعلام بشكل جيد. ما هو الخطأ في تلك المجموعة؟
select days_played.day_played, count(distinct days_played.user_id) as OLD_users
from days_played inner join days_received
on days_played.day_played = days_received.day_received
and days_played.user_id = days_received.user_id
where days_received.min_bulk_MT > days_played.min_MO
and days_played.user_id in
(select sgia.user_id
from days_played as sgia
where sgia.day_played < days_played.day_played
--group by sgia.user_id
--having sum(sgia.B_first_msg) = 0
)
group by days_played.day_played
المحلول 3
حسنًا ، اكتشفت ما هي المشكلة التي كان عليّ تضمين معرف المستخدم في الانبعاث الفرعي: "حيث days_played.user_id = sgia.user_id و sgia.day_played <days_played.day_played"
نصائح أخرى
تعرف على ما يفعله الاستعلام باستخدام showplan لإظهار التفسير.
في هذه الحالة ، لا يمكنك التخلص من الاستعداد الفرعي بجعله جزءًا من الاستعلام الرئيسي؟
هل يمكنك محاولة إعادة كتابة الاستعلام على النحو التالي؟
select days_played.day_played,
count(distinct days_played.user_id) as OLD_users
from days_played
inner join days_received on days_played.day_played = days_received.day_received
and days_played.user_id = days_received.user_id
where days_received.min_bulk_MT > days_played.min_MO
and 0 = (select sum(sgia.B_first_msg)
from days_played as sgia
where sgia.user_id = days_played.user_id
and sgia.day_played < days_played.day_played
)
group by days_played.day_played
أعتقد أن هذا يجب أن يمنحك أداء أفضل ...
لا تنتمي إلى StackOverflow