در زیر به برخی از تکنیک ها و مفاهیم صحی و اساسی که باید به منظور برآورده کردن حداکثر کارایی یا Performance در کوئری ها بخاطر بسپاریم، اشاره می کنیم.

راهکارها و تکنیکهای Performance Tuning
1.ما همیشه باید Predicate* کافی به کوئری خود اضافه کنیم و در کوئری ها از ستون های index استفاده کنیم و همچنین سعی کنیم ستون های index را در Predicates ها مورد استفاده قرار دهیم.
2.در صورت امکان، فقط از ستون هایی که index گذاری شده اند را در کوئری SQL استفاده کنید.
3.ما باید همیشه Selectivity کوئری خود را در نظر داشته باشیم اگر Selectivity از یک جدول بیش از 5٪ باشد ، در این صورت اطمینانی وجود ندارد کهoptimizer از index استفاده نماید.
4.ما هرگز نباید بر روی ستون هایی که index گذاری شده اند عملیات محاسباتی انجام دهیم.
5.در هنگام استفاده از عملگر like در ابتدای آن از کاراکتر % استفاده نکنیم مانند like ‘%on%’ و به جای آن از index معکوس (به عنوان مثال (where reverse(last_name) like ‘on%’ استفاده کنیم.
6.از function بر روی ستون های index گذاری شده استفاده نکنید و به جای آن همیشه باید از یک کوئری استفاده کنیم.
7.B-Tree index جهت ایندکس نمودن از مقادیر null استفاده نمی کند و این گاهی اوقات باعث کاهش استفاده از index در کوئری های ما می شود. برای جلوگیری از این ما می توانیم از IS NOT در where clause استفاده کنیم، پیشنهاد می شود از BITMAP Index به جای B-Tree index استفاده کنید
8.ما باید از Truncate به جای Delete استفاده کنیم (Truncate،Redo تولید نمی کند) Truncate ایندکس غیر قابل استفاده را دوباره قابل استفاده می کند.
9.همیشه باید datatype ستونها را با مقادیر داخل ستونها مقایسه کنیم زیرا که اگر مطابقت نداشته باشند، optimizer یا بهینه ساز از ایندکس استفاده نمی کند.
10.از به کار بردن Having by clause بایستی صرفنظر گردد، زیرا که این شرط فقط ردیفهای جداول را بعد از خواندن از memory یا دیسک حذف یا از دسترس خارج می کند.
11.اگر نیازی به استفاده از همه جدول در یک View ندارید، باید از به کاربردن این view در کوئری های خود صرف نظر کنیم
12.استفاده از materialized view و partition Table همیشه بایستی در دستور کار قرار گیرد.
13.برای کوئری هایی که selectivity پایینی دارند باید از Partition Table استفاده کنیم.
14.توصیه می شود از مکانیزم bulk collect یا جمع آوری انبوه داده استفاده گردد که باعث کاهش Context switch یا انتقال متن بین SQL و PL/SQL engine می شود، implicit cursor ها با واکشی(Fetching) 100 ردیف اول به صورت پیش فرض از مکانیزم bulk collect استفاده می کنند.
15.استفاده از Bind variable: از Bind variable ها زمانیکه که کوئری مشابه را بارها و بارها اجرا می کنیم ولی تنها مقدار Predicate تغییر میکند، استفاده می شود. این متغیر با کاهش تعداد Parse count ها کارایی (performance) را افزایش می دهد.
16.Bind Variable Peeking: فرآیندی است که طی آن optimizer یا بهینه ساز قبل از تصمیم گیری در خصوص Execution plan منتظر میماند و به اولین Variable نگاه می کند. این مکانیزم فقط پس از بدست آوردن اولین Bind Variable برنامه را اجرا می کند.
17.از Bind Variable ها فقط زمانی استفاده می گردد که کاردینالیتی (cardinality) تمام متغیرها در ستون یکسان باشند.
18.در صورتی که Selectivity هر یک از متغیرها متفاوت باشد نباید از Bind Variable استفاده نمود.
19.از نسخه Oracle 12C به بعد Adaptive Cursor Sharing یا ACS بصورت پیش فرض استفاده می شود.
20.Adaptive cursor sharing به صورت خودکار کوئری هایی که نیاز به یک Execution plan دیگر و یا همان Execution plan فعلی دارند را با استفاده از bind aware cursor یا bind sensitive cursor آشکار می نماید.

توضیحات:
Predicate: syntax که به منظور تعیین خروجی condition ها مثلا Where Clause استفاده می گردد، بطور مثال در شرط زیر accno=70 یک predicate می باشد.

Select * from emp
;Where accno=70