delphi4arab منتديات دلفي للعرب

نسخة كاملة : اي استعلام اسرع وافضل بحسب المعطيات هذه
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
هنا اجريت استعلامين يؤديان نفس المهمة ولكن لاحظت ان احدهما يبدو اسرع من الثاني
فيبدو ان العبارة 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]
سلام عليكم
قم بحذف

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


ثم جرب المقارنة مرة ثانية .
إقتباس :ثم جرب المقارنة مرة ثانية .

لن يقبل ان Group اجباري طالما استخدمت Joint الا بحال كانت كل الحقول تحت تحت تأثير احدى الدوال مثل Sum او count او ماشابه
سلام عليكم

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



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

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

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

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

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


هنا وفي هذه المرحلة بالضبط يمكن المقارنة بين الاستعلامات .