使用DBMS_XPLAN.DISPLAY分析SQL執(zhí)行計劃,通常會看到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)化器評估SQL時使用了額外的對象幫助完成評估;
- 對象改變了優(yōu)化器原先的評估計劃;
當(dāng)看到這些信息,比較關(guān)心的是這個對象(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,為了測試這個問題,開發(fā)人員添加了未來某一天這樣的日期值測試;這里用一個清晰的時間來代替未來的日期;
INSERT INTO