8.8.1 使用 EXPLAIN 优化查询

EXPLAIN语句提供有关 MySQL 如何执行语句的信息:

借助EXPLAIN,您可以看到应该向 table 中添加索引的位置,以便通过使用索引查找行来使语句更快地执行。您还可以使用EXPLAIN来检查优化器是否以最佳 Sequences 连接 table。为了提示优化器使用与SELECT语句中 table 的命名 Sequences 相对应的连接 Sequences,请以SELECT STRAIGHT_JOIN而不是SELECT开头该语句。 (请参见第 13.2.9 节“ SELECT 语句”。)但是,STRAIGHT_JOIN可能会禁止使用索引,因为它禁用了半联接转换。参见第 8.2.2.1 节“使用半联接转换优化子查询,派生 table 和视图引用”

优化器跟踪有时可能提供与EXPLAIN互补的信息。但是,优化程序的跟踪格式和内容在版本之间可能会发生变化。有关详细信息,请参见MySQL 内部:跟踪优化器

如果您在认为应该使用索引时遇到问题,请运行ANALYZE TABLE以更新 table 统计信息(例如,键的基数),这可能会影响优化器的选择。参见第 13.7.2.1 节“ ANALYZE TABLE 语句”

Note

EXPLAIN也可用于获取有关 table 中列的信息。 EXPLAIN tbl_nameDESCRIBE tbl_nameSHOW COLUMNS FROM tbl_name同义。有关更多信息,请参见第 13.8.1 节“ DESCRIBE 语句”第 13.7.5.5 节“ SHOW COLUMNS 语句”