B.4.5 与优化器有关的问题

MySQL 使用基于成本的优化器来确定解决查询的最佳方法。在许多情况下,MySQL 可以计算出最佳的查询计划,但是有时 MySQL 手中没有足够的信息,因此必须对数据进行“有根据的”猜测。

对于 MySQL 没有做“正确”事情的情况,可以用来帮助 MySQL 的工具是:

  • 使用EXPLAIN语句可获取有关 MySQL 如何处理查询的信息。要使用它,只需将关键字EXPLAIN添加到SELECT语句的前面:
mysql> EXPLAIN SELECT * FROM t1, t2 WHERE t1.i = t2.i;

EXPLAIN第 13.8.2 节“ EXPLAIN 语句”中进行了更详细的讨论。

  • 使用ANALYZE TABLE tbl_name更新扫描 table 的密钥分布。参见第 13.7.2.1 节“ ANALYZE TABLE 语句”

  • 对扫描的 table 使用FORCE INDEX来告诉 MySQL 与使用给定索引相比,table 扫描非常昂贵:

SELECT * FROM t1, t2 FORCE INDEX (index_for_column)
WHERE t1.col_name=t2.col_name;

USE INDEXIGNORE INDEX也可能有用。参见第 8.9.4 节“索引提示”