MySQL explain 的用法

举个栗子吧

EXPLAIN
SELECT
	cooperation_period ,
	COUNT(*) AS countNum
FROM
	(
		SELECT
			l.user_id
		FROM
			(
				SELECT DISTINCT
					user_id
				FROM
					loan
				WHERE
					is_delete = 'normal'
				AND `status` IN(
					'CASH_ING' ,
					'CASH_FAILED' ,
					'IN_LIQUIDATION' ,
					'COMPLETION_OF_LIQUIDATION' ,
					'REPAYMENT_IN' ,
					'COMPLETION_OF_REPAYMENT'
				)
			) l
		LEFT JOIN at_user u ON l.user_id = u.id_str
		WHERE
			u.`user_type` IN(0 , 1 , 2)
	) lu
LEFT JOIN at_user_operate uo ON uo.user_id = lu.user_id
WHERE
	uo.data_type = 0
GROUP BY
	uo.cooperation_period;

以上sql执行的结果为:

select_type列解释:

PRIMARY(查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY)

DERIVED(衍生表的SELECT, FROM子句的子查询)

table列解释:

表示sql执行查询的表。derived中文释义为衍生,其后面的数字表示该表是执行哪个查询后衍生的,拿本例来说,table列的第4行derived3中的3就对应于id列中第五行的id值3,即序号为4的查询是在序号为5的查询结果(即衍生表l)的基础上进行的。

这里需要注意的是,MySQL不是在l和u进行left join后再用where来筛选出结果,而是先根据where条件筛选出符合条件的u表的数据后再和l表进行left join 。

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值