MySQL explain 的用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huxinguang_ios/article/details/81353891

举个栗子吧

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 。

猜你喜欢

转载自blog.csdn.net/huxinguang_ios/article/details/81353891