访问路径:如INDEX、FULL、CLUSTER、INDEX_FFS等。 查询转换:如MERGE、USE_CONCAT、NO_EXPAND等。 连接顺序:如LEADING、ORDERED、STAR等。 连接操作:如USE_NL、USE_HASH、USE_MERGE等。 并行执行:如PARALLE、NOPARALLEL、PARALLEL_INDEX等。 其他类型;如APPEND、UNNEST、CACHE等。 INDEX只是Hint的一类。 关于LEADING、OR...
这一部分hint 将直接影响SQL 的执行计划,所以在使用时需要特别小心。 该类Hint对DBA分析SQL性能非常有帮助,DBA 可以让SQL使用不同的Hint得到不同的执行计划,通过比较不同的执行计划来分析当前SQL性能。 2.1 FULL Hint 该Hint告诉优化器对指定的表通过全表扫描的方式访问数据。 示例: SQL> select /*+full(dave) ...
{DELETE|INSERT|SELECT|UPDATE} /*+ hint [text] [hint[text]]... */ or {DELETE|INSERT|SELECT|UPDATE} --+ hint [text] [hint[text]]... 注解: 1) DELETE、INSERT、SELECT和UPDATE是标识一个语句块开始的关键字,包含提示的注释只能出现在这些关键字的后面,否则提示无效。 2) “+”号表示该注释是...
例如他们通过Hint:/*+ ORDERED USE_NL(B C) INDEX(B IDX_TRANSSTBL_RETURN) */,就是指定了按From顺序进行连接操作,并且连接方式为Nested_Loop,同时按IDX_TRANSSTBL_RETURN索引访问B表。 曾几何时,能广泛、深入使用Hint的开发人员的确是高手,他们甚至比Oracle优化器自己产生的SQL语句执行计划还要好,执行效率还要...
/*+ USE_NL(table_name) */:这个Hint用于指定是否使用并行查询来执行查询。并行查询可以充分利用多核处理器的优势,从而提高查询性能。如果表很大,并且你想使用并行查询来加速查询,那么可以使用这个Hint。 /*+ JOIN(table_name1 table_name2) */:这个Hint用于指定连接表的顺序。在某些情况下,改变连接表的顺序可以...
INDEX:告诉优化器对指定表通过索引的方式访问数据。当访问数据会导致结果集不完整时,优化器将忽略这个Hint。 SELECT /*+INDEX(BSEMPMS SEX_INDEX) USE SEX_INDEX BECAUSE THERE ARE FEWMALE BSEMPMS */ FROM BSEMPMS WHERE SEX='M'; NO_INDEX:告诉优化器对指定表不允许使用索引。这个提示会禁止优化器使用指定...
部分常用hint。1.全表扫描hint full(table_name)相对而言,全表扫描hint使用场合较少,但是要知道,全表扫描并不一定比索引效率低,特别是查询表中80%以上的数据库,全表扫描的效率要高于索引扫描。2.索引hint index(table_name index_name)这两种hint一个是强制使用索引,另一个是强制执行计划不要走...
如果你没有正确的指定Hint,Oracle将忽略该Hint,并且不会给出任何错误。 另:每个SELECT/INSERT/UPDATE/DELETE命令后只能有一个/+/,但提示内容可以有多个,可以用逗号分开,空格也可以。 如:/*+ ordered index() use_nl() */ Hint分类 优化器模式Hint
{DELETE|INSERT|SELECT|UPDATE} --+ hint [text] [hint[text]]... 如果语(句)法不对,则ORACLE会自动忽略所写的HINT,不报错 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP...
常用于SQL调优过程中对比索引和非索引扫描。3.索引快速扫描hintindex_ffs(table_nameindex_name)这种索引称之为索引快速扫描,常用于统计索引列键值的个数,如count(object_id),跟全表扫描很像,但效率要比全表扫描要高很多,也就是执行计划中看到的FASTFULLSCN。4.索引跳跃扫描hintindex_ss(table_...