你是會使用多個單表查詢,還是使用一個多表聯合查詢?

以前寫程序的時候經常遇到,會用程序來代替外鍵約束,使用幾條單表查詢。

最近看到有很多人使用的是多表聯合查詢。

請問,這兩者各有什麼優缺點,有什麼不同的使用場景。

請著重從性能角度上分析下二者的差異


簡單說說

1. 從邏輯架構分層原則來看

關聯關係代表了業務規則/邏輯,毫無約束大量使用關聯查詢,就是把大量的業務規則和邏輯放在資料庫來執行了,資料庫消耗cpu、內存、io等資源進行關聯操作,實際上是在做應用該做的事情。

2. 從資源利用率方面看

大部分場景下,並不是所有關聯查詢的結果都被有效使用了。例如後台管理的列表界面,通常都會分頁顯示,關聯查詢的結果集,只有當前頁的數據被使用,其他都是無用的,但資料庫需要消耗額外資源得到全部結果集,再從中得到當前頁數據。

3. 從架構的伸縮性方面看

大量的關聯查詢會導致集中式的資料庫架構很難向分散式架構轉換,伸縮性方面的優化難度高。

關聯查詢方便快速,開發效率比較好,如果系統、資料庫經過一些垂直優化手段完全能夠滿足性能要求是可以使用的,例如中小企業的內部管理系統等。

不使用關聯查詢在架構層面有很多優點,但對系統分析和設計、開發能力要求高。一般在互聯網行業等用戶數較多的情況下最好重視這方面。

理論上不存在什麼複雜場景,如果不使用資料庫的關聯查詢就無法滿足需求的。巨無霸的ERP系統SAP,基本整個系統功能都是用單表查詢實現的


做數據倉庫的都會寫一個大的關聯,盡量一句把所有的數據都提取出來,只求結果不求過程。

這是結構化查詢語言和編程語言思路上的區別。


數據量大的話,多表查詢一定是低效的。

但是我們這些數據狗,做日報周報月報年報是不會care的。

除非DBA敲門進來罵人,否則多大的查詢都是一大排join。懶到極致了,還會有四五層嵌套的subquery。

沒辦法,要接孩子放學,


推薦閱讀:

TAG:資料庫 | SQL | MySQL | 查詢 | SQL語句 |