بتاريخ: 12 مارس 200916 سنة comment_151001 إخواني الكرام في هذا المنتدى المباركأنا شغال على اوراكل 10جي وجهازي راماته عاليه والمعالج كمان هل من مساعدة في حذف سجلات كثيرة قد تتجاوز نصف مليون سجل أو أكثر بسرعة بدون التأثير على باقي السجلاتيعني لا اريد حذف كامل السجلات فقط محددةعلما بانني استخدمت مقطع where ولكني لاحظت ان القاعدة تعلق ولا يتم الحذف الا بعدد قليل من السجلامثلا الجدول fatm عندي مكون من اربعة حقول الحقل الأول رقمي rgm والثاني نصي esm والثالث نصي name والرابع رقمي IDفوضعت الأامر على النحو التالي Delete from fatm where id=2; ولكن لم يتم التنفيذ لان مجموعة السجلات بالألوففهل من مساعد لي في ذلك ولكم الشكر والامتنان تقديم بلاغ
بتاريخ: 12 مارس 200916 سنة comment_151002 اعتقد لو عملت index الاول على الجدول على العمود id قبل عمليه الحذف العمليه هتكون اسرع و لو ان هى طبيعة العملية اكيد هتاخد وقت الى حد ما تقديم بلاغ
بتاريخ: 12 مارس 200916 سنة كاتب الموضوع comment_151024 أخي الكريم شكرا لتفاعلك ولكن هل من الممكن كتابة كيفية عمل اندكس لهذا الجدول وكيف يكتب الكو د في sqlولك خالص تحياتي وساقوم ان شاء الله بالتجربة واعطائك النتائج تقديم بلاغ
بتاريخ: 13 مارس 200916 سنة comment_151029 تفضل اخي... CREATE INDEX INDX_NAME ON TABLE_NAME (COL_NAME); تقديم بلاغ
بتاريخ: 15 مارس 200916 سنة كاتب الموضوع comment_151294 شكرا جزيلا اخي على ردك ولكن حاولت انشاء اندكس بنفس الكود ولم انجحهل من الممكن شرح مقاطع الكود اندكس نيم هل تقصد اسمي الاندكسوتيبل نيم تقصد اسم الجدول المراد الحذف منهوالعبارة الاخيرة بين القوسين ماذا يراد بها وهل من الممكن ان تكتب الكود على نفس اسم الجدول الخاص بيولك خالص تحياتي تقديم بلاغ
بتاريخ: 16 مارس 200916 سنة comment_151373 السلام عليكم...بالنسبة لتسريع الأداء هناك حل و لكن يختلف حسب الحالة .جرب هذا الكود و أخبرني بالنتائج .أنا قمت بتجربته على جدول و لاحظت الفرق الكبير بين الطريقتين كالتالي:في الحالة العادية استغرق حذف 3,809,280 سجل 140 ثانية بينما في الحالة الثانية استغرق حذف 3,809,280 سجل 28 ثانية SQL> select count(*) from testd2; COUNT(*) ---------- 10158080 SQL> select count(*) from testd2 where deptno=20; COUNT(*) ---------- 3809280 طريقة الحذف العادية مع قياس المدة: SQL> declare 2 p1 number; 3 p2 number; 4 begin 5 select to_number(to_char(sysdate,'mi'))*60+to_number(to_char(sysdate,'ss')) into p1 from dual; 6 delete from testd2 where deptno=20; 7 commit; 8 select to_number(to_char(sysdate,'mi'))*60+to_number(to_char(sysdate,'ss')) into p2 from dual; 9 dbms_output.put_line(p2-p1); 10 end; 11 / 140 PL/SQL procedure successfully completed. الطريقة الثانية : SQL> declare 2 p1 number; 3 p2 number; 4 begin 5 select to_number(to_char(sysdate,'mi'))*60+to_number(to_char(sysdate,'ss')) into p1 from dual; 6 execute immediate 'create table tt as select * from testd2 where deptno<>20'; 7 execute immediate 'drop table testd2'; 8 execute immediate 'rename tt to testd2'; 9 select to_number(to_char(sysdate,'mi'))*60+to_number(to_char(sysdate,'ss')) into p2 from dual; 10 dbms_output.put_line(p2-p1); 11 end; 12 / 28 PL/SQL procedure successfully completed. تم تعديل 16 مارس 200916 سنة بواسطة TROYMAN تقديم بلاغ
بتاريخ: 16 مارس 200916 سنة comment_151377 مرحباجرب : CREATE INDEX INDX_FATM_ID ON FATM(ID); DELETE FROM FATM WHERE ID=2; تقديم بلاغ
بتاريخ: 17 مارس 200916 سنة كاتب الموضوع comment_151426 الاخوة الكرام جميعا شكرا جزيلا على الردود الجميلة تمت التجربة وبالفعل تم حذف العدد الهائل من السجلات في ثواني باستخدام الطريقة الثانية التي اشار اليها الاخ العزيز تروماناما باقي الطرق فلم تعمل شيئا بل تهنق بالجهازأمر أخر لو كان الحذف لجدول ماستر وجدول ديتيلز كيف ينفذ هذا الكود علما بانني نفذته وتم حذف السجلات لكن سجلات جدول الديتيليز تبقى كما هيشكرا جزيل وأرجو التفاعل تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.