我们来学mysql -- EXPLAIN之ID(原理篇)
EXPLAIN之ID
- 题记
- ID
题记
- 2024美国大选已定,川普剑登上铁王座,在此过程中出谋划策的幕僚很重要,是他们决定了最终的执行计划
- 在《查询成本之索引选择》中提到,explain的输出,就是优化器(幕僚)选择的执行计划
- 除了SELECT开头的查询,DELETE、INSERT、UPDATE也都有执行计划,这里只关注SELECT
- 从输出的计划中可见很多字段,传达了什么样的信息,先从ID开始
ID
-
为每一个select分配唯一的ID
-
单表查询
EXPLAIN select * from ucoding where k1 = 'Td621'
-
多表连接查询
-
EXPLAIN select * from ucoding u1 JOIN icoding on k1 = i_k1 where mark = 'Td621'
-
欸!快看,明明只一个select,有两个执行计划,哈哈哈…
- 咱来解释下,首先这依然是当前select的执行计划,和记录数无关,难道去做大保健只是洗个脚吗,洗脚只是计划中的一个步骤
- 在连接查询语句,每个表都有条记录,神如innodb,TA也得挨个表处理是不!
- 再有,在连接查询语句,有驱动表和被驱动表时,id相同
-
-
涉及多个select(子查询)
EXPLAIN select * from ucoding where k1 in (SELECT i_k1 from icoding ) or k3 = 'a'
-
涉及多个select(union)
EXPLAIN select * from ucoding where k3 ='tt' union select * from icoding where i_k3 ='tt'
- id = null ,表示为临时表,因为 union需要去重, union all不需要去重,就没有临时表
``