多表關聯時不一定都要與A表數據進行關聯,A關聯B 生成ab表 on的優先級是高於where的 on是在生成臨時表的時候使用的條件,不管on的條件是否起到作用,都會返回左表 (table_name1) 的行。where則是在生成臨時表之后使用的條件,此時已經不管是否使用了left join了,只要條件不為真的行,全部過濾掉
主觀上一旦搞錯了主表,可能怎么調整索引都得不到高效的SQL,所以在寫SQL時,比如說在寫LEFT JOIN查詢時,如果希望左表是主表,那么就要保證在WHERE語句里的查詢條件盡可能多的使用左表字段,進而,一旦確定了主表,也最好只通過主表字段去ORDER BY
①sql盡量使用數據量小的表做主表,這樣效率高,如果使用數據量大的表做主表,此時使用left join 就會比較慢,即使關聯條件有索引。但如果使用inner join速度就較快。因為inner join 在執行的時候回自動選擇最小的表做基礎表,效率高,總之相比之下inner join不管從效率還是速度上都優於left join,畢竟left join 會多一部分邏輯運算
②選擇inner join還有個好處,不會產生null,有些表我們在定義的時候某些字段不允許存在null,如果用left join就可能會產生null,此時軟件就會報錯,而inner join可以避免
③在實際運用中選擇inner join還是left join這個需要根據實際場景進行選擇,並不是所有的地方都能用inner join的,建議能用則用
