鍍金池/ 問答/Java  數(shù)據(jù)庫/ 多個left join優(yōu)化

多個left join優(yōu)化

tables:

  • employee
  • employee_orgn:聯(lián)合主鍵(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:

clipboard.png

Q:

  1. 這里join聯(lián)查,mysql嵌套循環(huán)查詢了10的8次方的數(shù)量級嗎?
  2. 為什么有臨時表,和排序為什么是文件排序
  3. 為什么第二行是覆蓋索引
  4. 希望講解一下這個explain結果,優(yōu)化分析

感激不盡呀~

回答
編輯回答
情未了

1、注意看數(shù)字8的表頭key_len,說的是使用索引字段的長度。
2、Using tempory, Using filesort是受order by語句的影響,你可以去掉order by再看一下執(zhí)行計劃。
3、eo表使用覆蓋索引是合理的,因為索引已經包含了查詢所需的所有數(shù)據(jù)。

2017年8月6日 09:31