بررسی هینت ORDERED و LEADING

زمانی که یک دستور با چندین شرط join اجرا می شود، عمل join در هر لحظه تنها بین دو جدول آن دستور انجام خواهد شد به عبارت دیگر، عمل join یک عمل باینری می باشد و ترتیب انجام آن، می تواند به لحاظ پرفورمنسی، کارساز باشد.

برای تعیین ترتیب join بین جداول، باید حالات مختلفی توسط اوراکل بررسی شود که این کار می تواند وقت زیادی را از سیستم بگیرد برای جلوگیری از این اتلاف وقت، می توان ترتیب پیوند را با استفاده از هینت ORDERED تعیین کرد.

در قسمت زیر خواهیم دید که با کمک این هینت دریک دستور، ترتیب پیوندها بر اساس ترتیب جداول در عبارت from تعیین خواهند شد.

select /*+ ordered */ * from k,u,v where v.a=u.a and v.a=k.a

cost:2082837

select /*+ ordered */  * from v,k,u where v.a=u.a and v.a=k.a

cost:20834

همانطور که می بینید، هزینه اجرای دو دستور، تفاوت زیادی با هم دارند دلیل این اختلاف هزینه، به اندازه جدول v بر می گردد، که در مطلب “روشهای Join بین جداول(Nested – Hash – Sort)“، جزییات بیشتری را در مورد ان، ارائه کرده ایم.

روش دیگر برای تعیین این اولویت، استفاده از هینت LEADING می باشد با استفاده از این هینت، می توانیم به صراحت، ترتیب جداول را در هنگام عمل پیوند، مشخص کنیم و نیازی به تغییر قسمتهای دیگر کد نخواهیم داشت.

select /*+ LEADING(k,u,v) */  * from k,u,v where v.a=u.a and v.a=k.a;

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

دیدگاهتان را بنویسید

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