HINT
功能描述
HINT是一种以固定的格式和位置出现在SQL文本中的特殊注释,其作用是指定执行计划,用户可通这种方式改变优化器对执行计划的规划,从而使SQL按更优的执行计划执。
语法格式
/*+HINT_TEXT*/
参数说明
HINT_TEXT目前支持以下选项:
INDEX(table_name index_name)
:指示对目标表使用索引扫描。NOINDEX(table_name index_name)
:指示对目标表不使用指定索引。FULL(table_name)
:指示对目标表使用全表扫描。USE_HASH(table_name1,table_name2)
:指示目标表join路径使用hash join。
注意:
- 若HINT_TEXT中指定的表在查询语句中指定了别名,则在HINT_TEXT中需使用此别名,否则HINT将失效。
- +前不可存在空格,否则HINT将失效。
示例
先创建表并创建索引。
sql
-- 创建表并插入数据
SQL> CREATE TABLE t_hint (c1 INT, c2 INT);
SQL> BEGIN
FOR i IN 1..10 LOOP
INSERT INTO t_hint VALUES (i, i * 2);
END LOOP;
END;
/
-- 创建索引
SQL> CREATE INDEX i_hint ON t_hint(c1);
- 未使用HINT的查询执行计划:sql
SQL> EXPLAIN SELECT * FROM t_hint WHERE c1 = 3; plan_path | ------------------------------------------------------------------------------ 1 SeqScan[(1 1) cost=10,result_num=1](table=T_HINT)|
- 使用HINT的查询执行计划:sql
SQL> EXPLAIN SELECT /*+index(t_hint i_hint)*/ * FROM t_hint WHERE c1 = 3; plan_path | ------------------------------------------------------------------------------ 1 BtIdxScan[(1 1) cost=300,result_num=1](table=T_HINT)(index=I_HINT)| -- 使用表别名 SQL> EXPLAIN SELECT /*+index(t i_hint)*/ * FROM t_hint t WHERE t.c1 = 3; plan_path | ------------------------------------------------------------------------------ 1 BtIdxScan[(1 1) cost=300,result_num=1](table=T_HINT)(index=I_HINT)|