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執行計劃詳解】由于對其中幾個狀態有疑惑,所以這部分內容寫到另一篇文章中單獨討論 。

推薦閱讀