多个left join优化
tables:
- employee
- employee_orgn:联合主键(employee_id,orgn_id),索引1:employee_id,索引2:orgn_id
- orgn
sql:
explain SELECT DISTINCT e.*
FROM
employee e
LEFT JOIN
employee_orgn eo ON eo.employee_id = e.id
LEFT JOIN
orgn o ON o.id = eo.orgn_id
WHERE
e.state != 'deleted'
AND e.state != 'hidden'
AND (o.state != 'hidden' OR o.state IS NULL)
ORDER BY e.id DESC
explain:
Q:
- 这里join联查,mysql嵌套循环查询了10的8次方的数量级吗?
- 为什么有临时表,和排序为什么是文件排序
- 为什么第二行是覆盖索引
- 希望讲解一下这个explain结果,优化分析
感激不尽呀~
回答:
1、注意看数字8的表头key_len,说的是使用索引字段的长度。
2、Using tempory, Using filesort是受order by语句的影响,你可以去掉order by再看一下执行计划。
3、eo表使用覆盖索引是合理的,因为索引已经包含了查询所需的所有数据。
以上是 多个left join优化 的全部内容, 来源链接: utcz.com/p/167822.html