使用DBMS_XPLAN.DISPLAY分析SQL执行计划,通常会看到Note中有类似下面这样的提示;
Note ----- - SQL profile "SYS_SQLPROF_0158283a9b920000" used for this statement
SQL profile由人为手工创建或在Automatic SQL Tunning阶段由SQL tuning advisor创建,它看起来有如下的意思:
- 在优化器评估SQL时使用了额外的对象帮助完成评估;
- 对象改变了优化器原先的评估计划;
当看到这些信息,比较关心的是这个对象(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上创建了索引。
create index idx_orders_dt on orders(order_date);
在交易中可能经常遇到某些原因导致交易延期的情况,为了测试这个问题,开发人员添加了未来某一天这样的日期值测试;这里用一个清晰的时间来代替未来的日期;
INSERT INTO
