面试题答案
一键面试- USE INDEX
- 使用场景:当你明确知道某个索引能加速查询,但MySQL查询优化器未选择该索引时,可使用此提示强制查询使用指定索引。
- 语法格式:
SELECT /*+ USE INDEX (table_name index_name) */ column1, column2 FROM table_name WHERE some_condition;
- FORCE INDEX
- 使用场景:比USE INDEX更强制,无论索引是否适合,都强制查询使用指定索引。在查询优化器选择了不理想的索引路径,而你确定某个索引能带来更好性能时使用。
- 语法格式:
SELECT /*+ FORCE INDEX (table_name index_name) */ column1, column2 FROM table_name WHERE some_condition;
- IGNORE INDEX
- 使用场景:希望查询优化器不使用某些索引时,比如某些索引可能导致查询优化器选择较差的执行计划,可使用此提示让优化器忽略指定索引。
- 语法格式:
SELECT /*+ IGNORE INDEX (table_name index_name) */ column1, column2 FROM table_name WHERE some_condition;
- STRAIGHT_JOIN
- 使用场景:在多表连接查询中,希望按照SQL语句中表出现的顺序进行连接,而不是由查询优化器自行决定连接顺序时使用。
- 语法格式:
SELECT /*+ STRAIGHT_JOIN */ column1, column2 FROM table1 JOIN table2 ON table1.id = table2.id;
- SQL_BIG_RESULT
- 使用场景:当预计查询结果集非常大,且希望MySQL在执行查询时使用基于磁盘的临时表来存储中间结果,从而优化排序和分组操作时使用。
- 语法格式:
SELECT /*+ SQL_BIG_RESULT */ column1, column2 FROM table_name GROUP BY column1;