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