از اوراکل 12c به بعد ، CBO میتواند بعضی از انواع scalar subqueryها را به صورت internally به outer joinها تبدیل کند. که این ویژگی با یکی از hidden parameterها بنام optimizer_unnest_scalar_sq_ کنترل میشود که مقدار آن به صورت پیش فرض به true ست شده است . این که این ویژگی جدید باعث بهینه تر شدن کوئری های شما میشود یا اوضاع آنها را بدتر میکند کاملا به شرایط سایت شما و کوئری هایی که اجرا میکنید بستگی دارد.
فقط باید این نکته را درنظر بگیرید که این ویژگی در همه موارد برای scalar subqueryها کار نمیکند. یعنی CBO در بعضی موارد ، حتی با وجود اینکه مقدار این پارامتر به true ست شده است ، scalar subqueryها را به join تبدیل نمیکند.
نکته) با استفاده از کوئری زیر، میتوانید مقدار پیش فرض hidden parameterها را در دیتابیس مشاهده کنید.
select ksppinm, ksppstvl
from x$ksppi a, x$ksppsv b
where a.indx=b.indx
and ksppinm = '_optimizer_unnest_scalar_sq';
به مثال های زیر که در هر دو حالت true و false بودن این پارامتر اجرا شده است توجه نمایید:
مثال 1 :
Final query after CBO transformations :
مثال 2 :
Final query after CBO transformations :
n منابع