MySQL單表多次查詢和多表聯合查詢,哪個效率高?


很多高性能的應用都會對關聯查詢進行分解。

簡單地,可以對每個表進行一次單表查詢,然后將結果在應用程序中進行關聯。例如,下面這個查詢:

select * from tag

join tag_post on tag_post.tag_id=tag.id

join post on tag_post.post_id=post.id

where tag.tag=’mysql’;

可以分解成下面這些查詢來代替:

Select * from tag where tag=’mysql’;

Select * from tag_post where tag_id=1234;

Select * from post where id in(123,456,567,9989,8909);

到底為什么要這樣做?

咋一看,這樣做並沒有什么好處,原本一條查詢,這里卻變成了多條查詢,返回結果又是一模一樣。

事實上,用分解關聯查詢的方式重構查詢具有如下優勢:

1. 讓緩存的效率更高。 

許多應用程序可以方便地緩存單表查詢對應的結果對象。另外對於MySQL的查詢緩存來說,如果關聯中的某個表發生了變化,那么就無法使用查詢緩存了,而拆分后,如果某個表很少改變,那么基於該表的查詢就可以重復利用查詢緩存結果了。

2. 將查詢分解后,執行單個查詢可以減少鎖的競爭。

3. 在應用層做關聯,可以更容易對數據庫進行拆分,更容易做到高性能和可擴展。

4. 查詢本身效率也可能會有所提升

5. 可以減少冗余記錄的查詢。

6. 更進一步,這樣做相當於在應用中實現了哈希關聯,而不是使用MySQL的嵌套環關聯,某些場景哈希關聯的效率更高很多。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM