schedual定时任务执行报错 explain执行计划详解( 六 )

mysql> explain select * from t1 where a<100 and b > 100; ---- ------------- ------- ------------ ------- --------------- ------ --------- ------ ------ ---------- ------------------------------------ | id | select_type | table | partitions | type| possible_keys | key| key_len | ref| rows | filtered | Extra| ---- ------------- ------- ------------ ------- --------------- ------ --------- ------ ------ ---------- ------------------------------------ |1 | SIMPLE| t1| NULL| range | a| a| 5| NULL |99 |33.33 | Using index condition; Using where | ---- ------------- ------- ------------ ------- --------------- ------ --------- ------ ------ ---------- ------------------------------------ 上面示例中,从 a 索引上取得 99 行数据,优化器估算认为这 99 行数据中有 33.33% 满足 b > 100 这个条件 。对于单表查询来说,这个意义不大 。
对于关联查询来说,驱动表的 rows*(filtered/100) 代表优化器认为的扇出,对于关联查询的成本估算有很大的影响 。举例:
mysql> EXPLAIN SELECT * FROM s1 INNER JOIN s2 ON s1.key1 = s2.key1 WHERE s1.common_field = 'a'; ---- ------------- ------- ------------ ------ --------------- ---------- --------- ------------------- ------ ---------- ------------- | id | select_type | table | partitions | type | possible_keys | key| key_len | ref| rows | filtered | Extra| ---- ------------- ------- ------------ ------ --------------- ---------- --------- ------------------- ------ ---------- ------------- |1 | SIMPLE| s1| NULL| ALL| idx_key1| NULL| NULL| NULL| 9688 |10.00 | Using where ||1 | SIMPLE| s2| NULL| ref| idx_key1| idx_key1 | 303| xiaohaizi.s1.key1 |1 |100.00 | NULL| ---- ------------- ------- ------------ ------ --------------- ---------- --------- ------------------- ------ ---------- ------------- 从执行计划中可以看出来,查询优化器打算把 s1 当作驱动表,s2 当作被驱动表 。我们可以看到驱动表 s1 表的执行计划的 rows 列为 9688, filtered 列为 10.00,这意味着驱动表 s1 的扇出值就是 9688 × 10.00% = 968.8,这说明还要对被驱动表执行大约 968 次查询 。
ExtraExtra 是 EXPLAIN 输出中另外一个很重要的列,该列显示 MySQL 在查询过程中的一些详细信息 。
【schedual定时任务执行报错 explain执行计划详解】由于对其中几个状态有疑惑,所以这部分内容写到另一篇文章中单独讨论 。

推荐阅读