Oracle SQL 提示
???SELECT?/**//*+?FULL(e)?*/?employee_id,?last_name
??????FROM?hr.employees?e?WHERE?last_name?LIKE?:b1;?? ?? 注意:如果表有别名,则必须使用别名。并且即使表加上了schema名称,在提示中也不能指定schema名称。?3、HASH?? 指示优化器使用Hash扫描表,只适用于表簇中的表。?4、INDEX?? 指示优化器适用Index扫描表,适用于函数、域、B树、位图和位图联合索引。?? Index提示遵循以下规范:?? a、如果Index提示指定单个的索引,那么数据库执行该索引上的扫描,优化器不会执行全表扫描或者表上的其他索引。?? b、对于指定了多个索引的组合的Index提示,Oracle推荐使用INDEX_COMBINE而不是INDEX提示,因为它更加通用,如果Index提示指定了index列表,那么优化器会考虑走每个索引的代码,并从中选择代价最小的一条索引,如果扫描多个index的代价最小,那么优化器会扫描该个索引列表。优化器不会走全表扫描或者没有在index列表上的索引。?? c、如果Index提示没有指定Index,优化器会评估扫描每个Index的代价,并选择代价最小的Index,如果组合Index代价最小,那么优化器会选择扫描多个索引,并合并结果集。优化器不会走全表扫描。?
???SELECT?/**//*+?INDEX?(employees?emp_department_ix)*/??employee_id,?department_id
????FROM?employees?WHERE?department_id?>?50;?5、INDEX_ASC?? 按索引值的升序方向扫描索引,其他参数与INDEX 提示完全一样。?6、INDEX_COMBINE?? 联合索引提示。索引规则与INDEX提示一样。??
???SELECT?/**//*+?INDEX_COMBINE(e?emp_manager_ix?emp_department_ix)?*/?*
FROM?employees?e
WHERE?manager_id?=?108
OR?department_id?=?110;?7、INDEX_DESC? 降序INDEX提示。?
SELECT?/**//*+?INDEX_DESC(e?emp_name_ix)?*/?*
FROM?employees?e;?8、INDEX_FFS? 指示优化器执行快速全索引扫描,而不是全表扫描。?
SELECT?/**//*+?INDEX_FFS(e?emp_name_ix)?*/?first_name
FROM?employees?e;?9、INDEX_JOIN??以INDEX JOIN的方式扫描,必须存在足够少的INDEX,这些索引包含着查询中所有的列。?
SELECT?/**//*+?INDEX_JOIN(e?emp_manager_ix?emp_department_ix)?*/?department_id
FROM?employees?e?WHERE?manager_id?<?110?AND?department_id?<?50;?10、INDEX_SS? 索引跳跃扫描提示。?11、LEADING? 指定特定的表放在执行计划的前面,它比ORDERED提示更加通用。? 如果因为Join路线的依赖关系而不能首先被Join,提示就会被忽略;如果指定了两个或者多个冲突的LEADING提示,则他们都会被忽略;如果指定了ORDERED提示,那么LEADING就会被忽略。?12、MERGE??将视图合并到查询。? 如果视图查询语句包含GROUP BY子句或者SELECT语句中用到了 DISTINCT,那么优化器能够将视图合并到查询语句中,合成的合并也能够合并IN子查询,如果IN子查询没有关联。?
??SELECT?/**//*+?MERGE(v)?*/?e1.last_name,?e1.salary,?v.avg_salary
FROM?employees?e1,
(SELECT?department_id,?avg(salary)?avg_salary
FROM?employees?e2
GROUP?BY?department_id)?v
WHERE?e1.department_id?=?v.department_id?AND?e1.salary?>?v.avg_salary;?13、NOAPPEND?? 在并行模式中使用常规插入方法。?14、NOCACHE?15、NO_EXPAND?16、NO_FACT?17、NO_INDEX?18、NO_INDEX_SS?19、NO_MERGE?20、NO_PARALLEL?? 覆盖了使用DDL语言创建或者更改table的PARALLEL参数的设置。?21、NO_PARALLEL_INDEX?? 覆盖了使用DDL语言创建或者更改index的PARALLEL参数的设置。?22、NO_PUSH_PRED?? 23、NO_PUSH_SUBQ?24、NO_PX_JOIN_FILTER??? 阻止优化器使用并行联合位图过滤器?25、NO_REWRITE??? 使查询重写失效?26、NO_QUERY_TRANSFORMATION??? 跳过所有查询转换,包括但不限于:OR-expansion、视图合并、无嵌套子查询、星型转换和物化视图重写。?27、NO_STAR_TRANSFORMATION?28、NO_UNNEST?29、NO_USE_HASH?30、ORDERED Ordered这个提示会要求列在SQL表达式FROM字句里的表格按照指定的顺序进行合并,FROM字句里的第一个表格会指定驱动表格(driving table)?????? 指示优化器按照FROM子句出现的表顺序join表。Oracle推荐使用LEADING提示。?31、PARALLEL?? 指示优化器使用指定数目的服务器去执行并行操作,包括SELECT、INSERT、MERGE、UPDATE和DELETE部分的语句和表扫描部分都可使用。?? 注意:如果发生sort或者group,那么服务器的数量应该是提示指定的两倍。?? 如果任何并行都被禁止,那么提示就会被忽略。?? 如果指定了DEFAULT或者没有指定任何值,那么查询器就会去检查初始参数的设置来决定并行度。?? 临时表上的该提示将会被忽略。?32、PARALLEL_INDEX?? 为分区索引指定并行索引扫描的数量。示例:??? SELECT /*+ PARALLEL_INDEX(table1, index1, 3) */?33、PQ_DISTRIBUTE?34、PUSH_PRED?35、PUSH_SUBQ?36、REWRITE??? 对物化视图使用查询重写。