بتاريخ: 1 مايو 201411 سنة comment_249930 السلام عليكم لدي استعلام SELECT e.employee_id, j.job_title, e.salary, d.department_name FROM employees e, jobs j, departments d WHERE e.employee_id < 103 AND e.job_id = j.job_id AND e.department_id = d.department_id; اريد ان اعرف كم من الزمن استغرق هذا الاستعلام وكم من الذاكرة استخدم وهل يمكن تحسين هذا الاستعلام وتقليل الزمن ومساحة الذاكرة تقديم بلاغ
بتاريخ: 1 مايو 201411 سنة comment_249941 هل حد علمي الـ optimizer كده كده هو اللي بيحدد الجملة تتنفذ ازاي بيشوف انسب طريقة ينفذ بيها الجملة من ناحية الـ performance ويعملها والله اعلم تقديم بلاغ
بتاريخ: 2 مايو 201411 سنة comment_249973 الا يوجد امر في sql يقوم بهذا ؟ والله يا باشا انا معرفش , انا كل اللي اعرفه ( علي أد منا فاكر يعني) ان في حاجة اسمها hard parsing and soft parsing كل واحدة فيهم بتعدي بكذا مرحلة منهم مرحلة الـ optimizer اللي عندها الجملة بتتحدد هتتنفذ ازاي ممكن تقرأ انت بقى عن الموضوع ونصيحة اخوية , معتقدش ان حد هنا هيجاوبك , كله بيجري علي اكل عيشه , اسأل في منتدي اوراكل احسن لو الانجليزي بتاعك معقول , هتلاقي هناك ناس خبرة عشرين ناس وزيادة يردوا عليك بأدق التفاصيل كلامهم عنب بصراحة لكن هنا موعدكش تقديم بلاغ
بتاريخ: 2 مايو 201411 سنة comment_249988 السلام عليكم استخدم: SQL> set timing on; SQL> SELECT e.employee_id, j.job_title, e.salary, d.department_name FROM employees e, jobs j, departments d WHERE e.employee_id < 103 AND e.job_id = j.job_id AND e.department_id = d.department_id; تقديم بلاغ
بتاريخ: 3 مايو 201411 سنة comment_249998 نأسف اخي ياسين عثمان على عدم الرد ولكن ذلك نظرا لإجازة نهاية الاسبوع. كما ارى ان الاخ احمد حسن قام لارد على استفسارك الاول وهو "كم الزمن المستغرق". اما بالنسبة للمساحة المستخدمة فتستطيع اخي عمل الاتي SQL> set autotrace traceonly SQL> set timing on SELECT e.employee_id, j.job_title, e.salary, d.department_name FROM employees e, jobs j, departments d WHERE e.employee_id < 103 AND e.job_id = j.job_id AND e.department_id = d.department_id; ومن ثم سيظهر لك execution Plan "خطة تنفيذ الجملة" وهي الية التنفيذ االمتبعة من قبل Oracle Optimizer وهنا يدخل الكثير من امور التحسين "optimization" المتشعبة والمعقدة. في اخر جزء من المخرجات ستجد شيئا مثل: Statistics ---------------------------------------------------------- 2393 recursive calls 0 db block gets 398991 consistent gets 0 physical reads 1960 redo size 1267 bytes sent via SQL*Net to client 251 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 5 sorts (memory) 0 sorts (disk) 2 rows processed consistent gets : هو الذكراة المستخدمة من ال Buffer Cache لهذه الاستعلامة. اما عن سؤالك الاخير فهو بحر اخي الكريم لايمكن حصره في رد. اما بالنسبة لإسلام اعتقد انو كتييير افاده.. فاتمنى عزيزي الفاضل اذا كان عندك معلومات ادلي بها والا "فمتتشكرين" تحياتي تقديم بلاغ
بتاريخ: 6 مايو 201411 سنة كاتب الموضوع comment_250176 داير اغير في الاستعلام دا استخدم اي join اخري لاكن تعطي نفس النتيجة .... كيف؟ SQL> set autotrace traceonlySELECT e.employee_id, j.job_title, e.salary, d.department_nameFROM employees e, jobs j, departments dWHERE e.employee_id < 103AND e.job_id = j.job_idAND e.department_id = d.department_id; تقديم بلاغ
بتاريخ: 6 مايو 201411 سنة كاتب الموضوع comment_250187 الاخ / حامد عايز جملة اخرى تعطي نفس مخرج الاستعلام السابق مثلا:1- SELECT dname, deptno FROM dept WHERE deptno NOT IN (SELECT deptno FROM emp); 2-SELECT dname, deptnoFROM deptWHERE NOT EXISTS(SELECT deptnoFROM empWHERE dept.deptno = emp.deptno); كلهم يعطوا مخرج واحد مع اختلاف الزمن والمساحة تم تعديل 6 مايو 201411 سنة بواسطة ياسين عثمان ادريس تقديم بلاغ
بتاريخ: 6 مايو 201411 سنة comment_250194 اعتقد انك تريد شيئا مثل: SELECT d.dname, d.deptno FROM dept d, emp e WHERE e.deptno (+) = d.deptno and e.deptno is null; تساوي == SELECT dname, deptno FROM dept WHERE deptno NOT IN (SELECT deptno FROM emp); وقس على ذلك.. ارجو ان اكون قد فهمت سؤالك تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.