与优化器有关的问题
MySQL使用基于成本的优化器来确定解决查询的最佳方法。在许多情况下,MySQL可以计算出最佳的查询计划,但有时MySQL手中没有足够的有关数据的信息,因此必须对数据进行“有根据的”猜测。
对于MySQL没有做“正确”事情的情况,可以用来帮助MySQL的工具是:
使用该
EXPLAIN
语句获取有关MySQL如何处理查询的信息。要使用它,只需将关键字添加EXPLAIN
到SELECT
语句的前面:mysql>
EXPLAIN SELECT *FROM t1, t2WHERE t1.i = t2.i;EXPLAIN
“ EXPLAIN语句”中将详细讨论。- 使用更新的扫描表的键分布。请参见“ ANALYZE TABLE语句”。
ANALYZE TABLE tbl_name
使用
FORCE INDEX
的扫描表告诉MySQL该表扫描是非常昂贵相比,使用给定的指标:SELECT *FROM t1, t2FORCE INDEX (index_for_column)WHERE t1.col_name=t2.col_name;USE INDEX
并且IGNORE INDEX
可能也很有用。请参见“索引提示”。- 全局和表级
STRAIGHT_JOIN
。请参见“ SELECT语句”。 - 您可以调整全局或特定于线程的系统变量。例如,使用该选项启动mysqld
--max-seeks-for-key=1000
或使用SET max_seeks_for_key=1000
告诉优化器假定没有键扫描导致超过1000个键查找。请参见“服务器系统变量”。