如果不满意MYSQL提供的优化方案,可以使用一些查询提示来控制优化器的行为
1.HIGH_PRIORITY和LOW_PRIORITY
决定访问同一个表的语句相对与其他语句的优先级,根据这两个提示服务器对访问表的队列进行处理,在有表锁的存储过程中有效,但在有细粒度锁或者并发控制的存储引擎上无效
2.DELAYED
应用于INSERT和UPDATE,语句立刻返回并将待插入的列放入缓冲区,在表空闲时插入。
3.STRAIGHT_JOIN
强制联接顺序。
4.SQL_SMALL_RESULT和SQL_BIG_RESULT
提示优化器在GROUP BY 和DISTINCT查询中何时以及如何使用临时表
5.SQL_BUFFER_RESULT
将结果放在临时表中,并尽快释放表锁。
6.SQL_CACHE和SQL_NO_CACHE
是否使用查询缓存。
7.SQL_CALC_FOUND_ROWS
在有Limit子句的时候计算完整的结果集。可以通过FOUND_ROWS()来取得它得到的行数。
8.FOR UPDATE 和 LOCK IN SHARE MODE
控制锁定,预先锁定匹配行,只针对有行级锁的存储引擎
9.USE INDEX,IGNORE INDEX, FORCE INDEX
是否使用或忽略索引
10.系统变量Optimizer_search_depth和Optimizer_prune_level
用于控制优化器在选择执行计划,合理的设置可以加快选择的速度