حذف رکوردها در مقیاس بالا در اوراکل
براي سرعت بخشيدن حذف ركوردها در اوراکل از چند روش مي توان استفاده كرد:
-
استفاده از partitioning در اوراکل : كه مي توان يكدفعه يك پارتيشن را حذف كرد.
-
بهينه كردن delete sub query در اورکل
-
استفاده از bulk delete در اوراکل
-
حذف كردن index و constrains در اوراکل
-
استفاده از parallel كردن delete در اوراکل
-
استفاده از NOARCHIVELOG
-
تکه تکه كردن حذف اطلاعات مثلا براساس تاريخ
-
ايجاد دوباره يك جدول با استفاده از create table as select در اوراکل: بسيار در وقت شما صرفه جويي مي كند.
-
همه چيز بستگي به تعداد جداول و تعداد در هر بار اجرای حذف، دارد. حال مي توانيد به روش زير عمل كنيد: معمولا براي ركوردهاي پايين مثل يك ميليون ايندكس نياز نيست.
در ابتدا بايد parallel DML را enable كنيد چون بصورت پيش فرض غيرفعال مي باشد.
ALTER SESSION ENABLE PARALLEL DML;
ALTER SESSION ENABLE PARALLEL DML;
مي توانيم در اوراکل به دو صورت زير عمل كنيد:
-full table scan
DELETE /*+ parallel(t1,4) full(t1) */
TBL_SELLERS t1
WHERE ROWID > ( SELECT MIN(ROWID) FROM TBL_SELLERS I
WHERE t1.SELLER_CODE=I.SELLER_CODE)
-full table scan
DELETE /*+ parallel(t1,4) full(t1) */
TBL_SELLERS t1
WHERE ROWID > ( SELECT MIN(ROWID) FROM TBL_SELLERS I
WHERE t1.SELLER_CODE=I.SELLER_CODE)
Or
- Index Fast Full Scan
DELETE /*+ parallel(t1,4) parallel_index(t1,4) index_ffs(t1) */
TBL_SELLERS t1
WHERE ROWID > ( SELECT MIN(ROWID) FROM TBL_SELLERS I
WHERE t1.SELLER_CODE=I.SELLER_CODE)
- Index Fast Full Scan
DELETE /*+ parallel(t1,4) parallel_index(t1,4) index_ffs(t1) */
TBL_SELLERS t1
WHERE ROWID > ( SELECT MIN(ROWID) FROM TBL_SELLERS I
WHERE t1.SELLER_CODE=I.SELLER_CODE)