在 Oracle 数据库中,经常需要使用SQL 提示(Hints)嵌入到 SQL 语句中,用来指导优化器生成特定执行计划。以下是一些常见的提示及其用途:
连接相关提示
- USE_NL(USE_NESTED_LOOPS)
- 作用:强制优化器使用嵌套循环连接(Nested Loops Join)方式来连接指定的表。嵌套循环连接适用于一个小表和一个大表连接的场景,小表作为驱动表,逐行读取并与大表匹配。
- 示例:
SELECT /*+ USE_NL(orders customers) */ * FROM orders JOIN customers ON orders.customer_id = customers.customer_id;
- USE_HASH
- 作用:强制优化器使用哈希连接(Hash Join)方式来连接指定的表。哈希连接适合处理大数据量的表连接,性能通常较好。
- 示例:
SELECT /*+ USE_HASH(employees departments) */ * FROM employees JOIN departments ON employees.department_id = departments.department_id;
- USE_MERGE
- 作用:强制优化器使用排序合并连接(Sort Merge Join)方式来连接指定的表。排序合并连接适用于已经排序好的数据或者需要排序的连接操作。
- 示例:
SELECT /*+ USE_MERGE(sales products) */ * FROM sales JOIN products ON sales.product_id = products.product_id;