بهبود سرعت درج انبوه با unusable کردن ایندکسها

در زمان بازسازی یک جدول حجیم و یا درج قابل توجهی از اطلاعات در یک جدول، unusable کردن ایندکسها می تواند باعث تسریع انجام عملیات شود. در ادامه با یک مقایسه ساده، این موضوع را نشان خواهیم داد.

برای انجام سناریو، جدولی را به همراه دو ایندکس ایجاد می کنیم.

SQL>Create table usef.mytbl as select * from usef.tbl_orig where 1=2;

SQL>create index usef.ind1 on usef.mytbl(id);

SQL>create index usef.ind2 on usef.mytbl(LINE);

در صورتی که ایندکسهای جدول در حالت valid قرار داشته باشند، درج یازده میلیون رکورد، حدودا 3 دقیقه طول خواهد کشید:

SQL>  conn usef/a

Connected.

SQL> set timing on

SQL> insert into usef.mytbl select * from tbl_orig;

11518080 rows created.

Elapsed: 00:03:22.52

همچنین با پرس و جوی زیر، حجم جدول را به همراه ایندکسهای آن مشاهده خواهیم کرد:

SQL>select p.owner, p.segment_name, p.BYTES / 1024 / 1024 “MB”,p.segment_type from dba_segments p where p.segment_name in (‘MYTBL’,’IND1’,’IND2’)

order by 3;

OWNER SEGMENT_NAME MB SEGMENT_TYPE
USEF IND2 304 INDEX
USEF IND1 312 INDEX
USEF MYTBL 1409 TABLE

 

حال با حذف اطلاعات جدول و unusable کردن ایندکسهای آن، این مسئله را بررسی خواهیم کرد:

SQL> truncate table usef.mytbl;

Table truncated.

SQL> alter index usef.ind1 unusable;

Index altered.

SQL> alter index usef.ind2 unusable;

Index altered.

در ادامه خواهیم دید که درج یازده میلیون رکورد به همراه بازسازی ایندکسهای جدول، حدودا 1 دقیقه زمان نیاز دارد:

SQL> startup force;

SQL>  conn usef/a

Connected.

SQL> set timing on

SQL> insert into usef.mytbl select * from tbl_orig;

11518080 rows created.

Elapsed: 00:00:44.39

SQL> alter index usef.ind1 rebuild;

Index altered.

Elapsed: 00:00:19.08

SQL> alter index usef.ind2 rebuild;

Index altered.

Elapsed: 00:00:20.17

همچنین حجم جداول و ایندکسها، به صورت زیر خواهد بود:

select p.owner, p.segment_name, p.BYTES / 1024 / 1024 “MB”,p.segment_type from dba_segments p where p.segment_name in (‘MYTBL’,’IND1′,’IND2′)

order by 3;

OWNER SEGMENT_NAME MB SEGMENT_TYPE
USEF IND2 192 INDEX
USEF IND1 208 INDEX
USEF MYTBL 1415 TABLE

 

 

ارتباط با نویسنده مطلب:vahidusefzadeh@ کانال تخصصی اوراکل و لینوکس: OracleDB@

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد.