使用DBMS_XPLAN.DISPLAY分析SQL執(zhí)行計(jì)劃,通常會(huì)看到Note中有類似下面這樣的提示;
Note ----- - SQL profile "SYS_SQLPROF_0158283a9b920000" used for this statement
SQL profile由人為手工創(chuàng)建或在Automatic SQL Tunning階段由SQL tuning advisor創(chuàng)建,它看起來有如下的意思:
- 在優(yōu)化器評(píng)估SQL時(shí)使用了額外的對(duì)象幫助完成評(píng)估;
- 對(duì)象改變了優(yōu)化器原先的評(píng)估計(jì)劃;
當(dāng)看到這些信息,比較關(guān)心的是這個(gè)對(duì)象(SLQ profile)是什么?它做了什么?是否真的需要它?帶著這些疑問學(xué)習(xí)和探索,最終決解了遇到的問題。
SQL> @i USERNAME INST_NAME HOST_NAME SID SERIAL# VERSION STARTED SPID OPID CPID SADDR PADDR -------------------- -------------------- ------------------------- ----- -------- ---------- -------- ---------- ----- --------------- ---------------- ---------------- OPS$SYWU sydb sywu.com 288 22197 11.2.0.4.0 20160421 13736 46 3392:1312 0000000071FE0DA0 0000000072149F40
遇到的問題
假設(shè)有這樣一張類似訂單的表orders;
create table orders(order_no,order_date)
as
select
level,cast(sysdate-level/24 as date)
from
dual
connect by level<=5E5;
SQL> @desc orders
Name Null? Type
------------------------------- -------- ----------------------------
1 ORDER_NO NUMBER
2 ORDER_DATE DATE
保存訂單信息,order_date上創(chuàng)建了索引。
create index idx_orders_dt on orders(order_date);
在交易中可能經(jīng)常遇到某些原因?qū)е陆灰籽悠诘那闆r,為了測(cè)試這個(gè)問題,開發(fā)人員添加了未來某一天這樣的日期值測(cè)試;這里用一個(gè)清晰的時(shí)間來代替未來的日期;
INSERT INTO