MySQL Explain计划中的Select tables optimized away是什么意思?

explain select count(comment_count) from wp_posts;

+----+-------------+---------------------------+-----------------------------+
| id | select_type | table,type,possible_keys, | Extra                       |
|    |             | key,key_len,ref,rows      |                             |
+----+-------------+---------------------------+-----------------------------+
| 1  | SIMPLE      | all NULLs                 | Select tables optimized away|
+----+-------------+---------------------------+-----------------------------+
1 row in set (0.00 sec)

注意:explain plan输出经过编辑以提高可读性。

最佳答案

这意味着您执行的查询只不过计算表中的行数而已,该表是MyISAM表。 MyISAM表存储有单独的行数,因此,执行此查询MySQL根本不需要查看任何表行数据。而是立即返回预先计算的行数。因此,表格访问被“优化了”,查询速度很快。

在MySQL中的其他存储引擎(如InnoDB)上不会发生相同的情况。但是实际上,由于各种其他原因,您在大多数情况下都希望使用InnoDB而不是MyISAM。 (即使没有行数优化,这种查询也非常非常快。)

select count(comment_count) from wp_posts;

那真的是你的本意吗?那和SELECT COUNT(*)...一样(假设comment_count不能是NULL,它不能是comment_count,或者您不会获得最佳化)。如果您总共需要SUM(comment_count),则应该使用ojit_code,而不会获得“优化离开”的行为。

10-02 05:38
查看更多