زمانی که یک دستور با چندین شرط 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;