在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

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

多個left join優(yōu)化

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:

clipboard.png

Q:

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

感激不盡呀~

回答
編輯回答
情未了

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

2017年8月6日 09:31