创建outline不生效

【 使用环境 】测试环境
【 OB or 其他组件 】observer
【 使用版本 】企业版3.2.3/社区版3.1.3
创建outline一直不生效

有张表大概20000条数据,table 名test_otl, 字段(id int,name varchar(20))
创建了索引 idx_id(id)

select id from test_otl where id =1 这样现在是会走索引的,
我想测试让它走全表扫描,
select/*+FULL(test_otl)*/ id from test_otl where id =1;
使用explain select/*+FULL(test_otl)*/ id from test_otl where id =1; #查看确实走了全表扫描

创建outline
create outline otl_test on select/*+FULL(test_otl)*/ id from test_otl where id =1;

这样创建完成以后,按理说每次查询我都直接走全表扫描了,可是为啥还是走索引呢??? 命名空格啥的我都注意了啊

2 个赞

要用explain 看下是否使用outline,还有就是空格、大小写都要检查下。

3 个赞

没有使用,我执行explain,里面还是显示走索引,难不成是需要参数或者变量啥的设置吗?? 我查了也没有啊,很奇怪,企业版和社区版都试了不行,,现在看来大概率是我使用的问题,,

2 个赞

outline 建好后,实际sql 要跑一次。然后去查看 实际执行计划。不是看 EXPLAIN 结果。
类似下面,查看这个视图。

mysql> SELECT plan_depth, plan_line_id, operator,name,ROWS,cost 
    -> FROM oceanbase.GV$OB_PLAN_CACHE_PLAN_EXPLAIN 
    -> WHERE tenant_id=effective_tenant_id() AND  svr_ip = '10.0.0.66' AND svr_port=2882 AND plan_id=190;
+------------+--------------+------------------------+--------------+------+------+
| plan_depth | plan_line_id | operator               | name         | ROWS | cost |
+------------+--------------+------------------------+--------------+------+------+
|          0 |            0 | PHY_NESTED_LOOP_JOIN   | NULL         |    2 |  172 |
|          1 |            1 |  PHY_SUBPLAN_SCAN      | NULL         |    1 |  154 |
|          2 |            2 |   PHY_SCALAR_AGGREGATE | NULL         |    1 |  154 |
|          3 |            3 |    PHY_SUBPLAN_SCAN    | NULL         |    1 |  154 |
|          4 |            4 |     PHY_TABLE_SCAN     | bmsql_oorder |    1 |  154 |
|          1 |            5 |  PHY_TABLE_SCAN        | bmsql_oorder |    1 |   17 |
+------------+--------------+------------------------+--------------+------+------+
6 rows in set (0.05 sec)
1 个赞

我刚刚又逛了下关于绑定的,确实是我自己理解的问题,认知不对, 现在搞清楚了,其实是生效的,是自己查询的东西不对,,感谢大佬周末热心帮助!!!

1 个赞

如何有效使用 outline 功能?

阅读本文你将了解:

  1. 如何获取 SQL ID
  2. 如何创建 outline
  3. 如何正确验证 outline 效果

为了防止某些 SQL 的执行计划发生变化,我们通常会创建 outline 来绑定执行计划。但是为什么实际过程中,我们创建 outline 并验证时总会遇到不生效的情况?