程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql分解連接的總結(來自於高性能MySQL以及自己網站性能優化)

mysql分解連接的總結(來自於高性能MySQL以及自己網站性能優化)

編輯:MySQL綜合教程

許多高性能的站點都用了“分解連接”技術,也就是把單個多表連接查詢改成多個但表查詢,然後在程序中合並數據,比如:

select a.*,b.* from A a join B b on a.id = b.id

可以替換為:

select a.* from A;

select b.* from B;

然後再把數據通過程序合並。

可能有些人認為這太浪費了,把一個查詢語句變成兩條查詢語句或者更多的查詢語句了,如果哪位猿類這樣想了,那你就應該繼續往下看了。

將連接查詢重構為多表查詢,總體有以下性能優勢:

一,緩存的效率更高。許多應用程序都直接緩存了表。

二,對MyISAM表來說,每個表查詢可以更有效的利用表鎖,因為查詢會鎖住單個表較短時間,而不是把所有表長時間鎖住。

三,在程序端應用連接,可以更方便的擴展數據庫,把不同的表放在不同的服務器上面。

四,查詢本身會更高效

五,可以減少多余的行訪問。在應用程序端進行連接意味著每行數據只會訪問一次,而連接從本質上來說是非正則化的,它會反復的訪問同一行數據。基於同樣的原因,這種重構方式可以減少網絡流量和內存消耗。

那在什麼時候在應用程序端進行連接效率更高呢?

一,可以緩存早期查詢的大量數據

二,使用了多個MyISAM表

三,數據分布在不用的服務器上

四,對於大表,使用in()替換連接

五,一個連接引用了同一個表很多次

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved