使用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)建,它看起來有如下的意思:

  1. 在優(yōu)化器評估SQL時使用了額外的對象幫助完成評估;
  2. 對象改變了優(yōu)化器原先的評估計劃;

當看到這些信息,比較關心的是這個對象(SLQ profile)是什么?它做了什么?是否真的需要它?帶著這些疑問學習和探索,最終決解了遇到的問題。

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

遇到的問題

假設有這樣一張類似訂單的表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);

在交易中可能經常遇到某些原因導致交易延期的情況,為了測試這個問題,開發(fā)人員添加了未來某一天這樣的日期值測試;這里用一個清晰的時間來代替未來的日期;

INSERT INTO 
        
		

網友評論