关于OBV4版本中的outline绑定的问题

在OBCPV4的材料中关于outline绑定有个疑问
有两个方法绑定outline
1.根据sqlid绑定outline,每个sql有不同的sqlid,即使sqlA和sqlB仅参数不同,sqlA绑定了outline1也不会影响sqlB原有的执行计划。
2.使用SQL_TEXT创建的outline,需要提供一个带hint和原始参数的sql,并进行参数化处理,如果sql参数化后与stmt去掉hint的文本相同则绑定,如果结尾没有指定 <target_stmt> ;是不是和format outline一样了,都是根据sql进行模糊匹配的?理论上这种绑定应该是精确匹配才对吧

举个例子比如
CREATE OUTLINE otl1 ON SELECT/+ INDEX(t1 idx_c2)/ * FROM t1 WHERE c2 = 1;
去掉hint的参数化文本是
CREATE OUTLINE otl1 ON SELECT * FROM t1 WHERE c2 = ?;
那我执行
SELECT/+ INDEX(t1 idx_c2)/ * FROM t1 WHERE c2 = 2时是不是也走了这个执行计划?是我理解的有问题吗

2 个赞

学习了,正在学习中

感觉理解没有问题,但是可以不带hint;带了应该会以hint为准

创建outline必须要带hint吧

如果使用SQL_TEXT创建Outline(不指定<target_stmt> )是不是本质上就是创建了一个FORMAT OUTLINE?感觉两者应该是等价的