优化器生成的执行计划可能不符合实际业务需求
根据文档库中的信息,可以通过以下两种方式强制干预 OceanBase 优化器的执行计划:
1. 使用 Hint
Hint 是 SQL 语句中一种特殊的注释,用于向数据库传达一些信息。通过在 SQL 语句中添加 Hint,可以指定优化器的行为,并按照 Hint 执行 SQL 查询。例如,可以使用 INDEX
Hint 指定查询使用的索引。
示例代码:
SELECT /*+ INDEX(t1 PRIMARY) */ * FROM t1 WHERE t1.c1 = 1;
此示例中,INDEX
Hint 强制优化器使用表 t1
的主键索引进行查询。更多关于 Hint 的详细信息和常用 Hint 可以参考文档片段中的相关内容(片段标题: 阅读和管理 OceanBase 数据库 SQL 执行计划 → 通过 Hint 生成指定计划)。
2. 使用 Outline 进行计划绑定
Outline 是一种允许用户在不修改 SQL 的情况下,通过在数据库中创建 outline 达到控制执行计划的机制。可以通过以下两种方式创建 Outline:
使用 SQL_TEXT 创建 Outline
CREATE OUTLINE otl_idx2 ON SELECT/*+ index(T1 idx2)*/ * FROM t1 WHERE c1 = 1 AND c2 = 1;
使用 SQL_ID 创建 Outline
CREATE OUTLINE otl_idx2 ON '27F4FC32407331073407EAA24F5E5FA4' USING HINT /*+ index(T1 idx2)*/ ;
推荐使用 SQL_ID 方式来创建 Outline,因为这种方式可以避免因空格、大小写等问题导致的 Outline 无法绑定的情况(片段标题: 计划缓存的缺点和解决方案 → 计划绑定)。
通过上述方法,可以在优化器生成的执行计划不符合实际业务需求时,强制干预其行为。
更多信息请查看:
好的 我尝试一下!