اي استعلام اسرع وافضل بحسب المعطيات هذه
#1
هنا اجريت استعلامين يؤديان نفس المهمة ولكن لاحظت ان احدهما يبدو اسرع من الثاني
فيبدو ان العبارة Join لست الخيار الأمثل عند الرغبة في التنفيذ بشكل اسرع 
الاستعلام الاول


كود :
select     groubs.id,     groubs.groub_name,     count( sanf.id ) count_of_id from groubs    inner join sanf on (groubs.id = sanf.f_class) group by groubs.id, groubs.groub_name

النتيجة

كود :
Query ------------------------------------------------ Plan ------------------------------------------------ Query Time ------------------------------------------------ Prepare       : 0.00 ms Execute       : 15.00 ms Avg fetch time: 1.67 ms Memory ------------------------------------------------ Current: 34,972,744 Max    : 35,020,976 Buffers: 2,048 Operations ------------------------------------------------ Read   : 1 Writes : 0 Fetches: 3,903 Marks  : 0 Enchanced Info: +-------------------------------+-----------+-----------+-------------+---------+---------+---------+----------+----------+----------+ |          Table Name          |  Records  |  Indexed  | Non-Indexed | Updates | Deletes | Inserts | Backouts |  Purges  | Expunges | |                   |         | Total  |   reads |    reads  |         |            |          |           |          |          | +-------------------------------+-----------+-----------+-------------+---------+---------+---------+----------+----------+----------+ |GROUBS              |        12 |       648 |           0 |       0 |       0 |       0 |        0 |        0 |                 0 | |SANF               |       648 |         0 |         648 |       0 |       0 |       0 |        0 |        0 |                 0 | +-------------------------------+-----------+-----------+-------------+---------+---------+---------+----------+----------+----------+


الاستعلام الثاني

كود :
select     groubs.id,     groubs.groub_name,     (select count(id) from sanf where sanf.f_class = groubs.id)  from groubs

النتيجة

كود :
Query ------------------------------------------------ Plan ------------------------------------------------ Query Time ------------------------------------------------ Prepare       : 0.00 ms Execute       : 0.00 ms Avg fetch time: 0.00 ms Memory ------------------------------------------------ Current: 34,972,744 Max    : 35,020,976 Buffers: 2,048 Operations ------------------------------------------------ Read   : 0 Writes : 0 Fetches: 1,352 Marks  : 0 Enchanced Info: +-------------------------------+-----------+-----------+-------------+---------+---------+---------+----------+----------+----------+ |          Table Name           |  Records  |  Indexed  | Non-Indexed | Updates | Deletes | Inserts | Backouts |  Purges  | Expunges | |                   |  Total   |   reads  |    read |         |        |            |           |           |                     | +-------------------------------+-----------+-----------+-------------+---------+---------+---------+----------+----------+----------+ |GROUBS               |         0 |         0 |          12 |       0 |       0 |       0 |        0 |        0 |                 0 | |SANF                 |         0 |       648 |           0 |       0 |       0 |       0 |        0 |        0 |                 0 | +-------------------------------+-----------+-----------+-------------+---------+---------+---------+----------+----------+----------+


[size=1][صورة: 2v5CKNh.jpg][/size]
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
الرد
#2
سلام عليكم
قم بحذف

كود :
group by groubs.id, groubs.groub_name


ثم جرب المقارنة مرة ثانية .
الفاشلون نوعان : الأول : فكر ولم يفعل .. والآخر: فعل ولم يفكر
[-] كل من 1 user says قال شكرا ل Mr.DOS على المشاركة المفيدة
  • Delphi4Us
الرد
#3
إقتباس :ثم جرب المقارنة مرة ثانية .

لن يقبل ان Group اجباري طالما استخدمت Joint الا بحال كانت كل الحقول تحت تحت تأثير احدى الدوال مثل Sum او count او ماشابه
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
الرد
#4
سلام عليكم

اكيد كنت اقصد group واحد فقط وليكن groubs.id



بيانات الجدول في مثالك ليست بالقدر الذي يسمح لك عمل مقارنة للاستعلام

جرب على جدولين حجم البيانات يكون اكبر اكيد راح ترفع القبعة للـ join وراح تتفن في عمل having

سوف يتطور استعلامك ليضم select + joins + group by + having + order by يوما ما ..

وتتذكر select top 100 مثلا لتفادي النجمة * وربح بعض الاجزاء من الثواني ....

و ستكون مظطر ايضا لعمل distinct هده سيناريوهات قد مررت بها ...


هنا وفي هذه المرحلة بالضبط يمكن المقارنة بين الاستعلامات .
الفاشلون نوعان : الأول : فكر ولم يفعل .. والآخر: فعل ولم يفكر
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم