下面兩個查詢給出了相同的結果。 只是想知道哪一個在性能方面更好。哪個是編寫sql的最佳實踐
查詢1:
SELECT N.*
FROM NOTIFICATIONS N
JOIN NOTIFICATION_COMPANY_GROUPS NCG
ON (N.COMPANY_ID = NCG.COMPANY_ID
AND N.ID = NCG.NOTIFICATION_ID)
JOIN COMPANY_USER_GROUPS CUG
ON (N.COMPANY_ID = CUG.COMPANY_ID
AND CUG.COMPANY_GROUP_ID = NCG.COMPANY_GROUP_ID)
JOIN NOTIFICATION_PROPERTIES NP ON (N.COMPANY_ID = NP.COMPANY_ID)
JOIN COMPANY_USER_PROPERTIES CUP
ON (N.COMPANY_ID = CUP.COMPANY_ID
AND CUP.PROPERTY_ID = NP.PROPERTY_ID)
WHERE N.COMPANY_ID = 2138
AND CUG.COMPANY_USER_ID = 41422
AND CUP.COMPANY_USER_ID = 41422;
查詢2:
SELECT N.*
FROM NOTIFICATIONS N
JOIN NOTIFICATION_COMPANY_GROUPS NCG
ON (N.COMPANY_ID = 2138
AND N.COMPANY_ID = NCG.COMPANY_ID
AND N.ID = NCG.NOTIFICATION_ID)
JOIN COMPANY_USER_GROUPS CUG
ON (CUG.COMPANY_USER_ID = 41422
AND N.COMPANY_ID = CUG.COMPANY_ID
AND CUG.COMPANY_GROUP_ID = NCG.COMPANY_GROUP_ID)
JOIN NOTIFICATION_PROPERTIES NP ON (N.COMPANY_ID = NP.COMPANY_ID)
JOIN COMPANY_USER_PROPERTIES CUP
ON (CUP.COMPANY_USER_ID = 41422
AND N.COMPANY_ID = CUP.COMPANY_ID
AND CUP.PROPERTY_ID = NP.PROPERTY_ID);
查詢規劃人員應該對待這兩種形式 - 查看* special * SQL實現中的查詢計劃以查看是否有任何意外。這就是說,我建議所有(也是唯一的)JOIN術語放在'ON ..'位,以及'WHERE'中的所有其他位置。也就是說,我推薦第一種形式 - 我發現閱讀/理解更簡單,並且更容易生成,修改或集成到外部查詢中。 – user2864740
爲什麼不測量它?剩下的事情:儘量寫出你的陳述儘可能容易理解(這有點關乎品味/思考方式)。這將更容易讓語句在語義上正確(並維護它們)。只有遇到性能問題,請嘗試其他方法。 (「不成熟的優化是萬惡之源」,D.E.Knuth說) – Ronald