mark---[mysql多表關聯查詢的最佳化方法]

來源:互聯網
上載者:User

標籤:

對於一個網站來說,資料庫的結構至關重要。即要利於儲存(入庫不阻塞),又要利於查詢(查詢不鎖表)。網站資料庫最佳化經驗是一個積累的過程。下面就對多表關聯查詢的最佳化方法,舉例說明。

現在社區分享類網站很火,就拿方維購物分享網站舉例說明吧。也是對二次開發方維購物分享網站的一點總結,高手可以飛過。

購物分享的關鍵表有:分享表、圖片表、檔案表、評論表、標籤表、分類表等。
圍繞分享的表就麼多,哇,那也不少啊。當我們查看一個圖片的詳細資料時,就要顯示以上表裡的資訊。顯示圖片所屬的分類、給圖片打的標籤、圖片的評論、有檔案的話還要顯示檔案下載資訊等。難道讓我們6個表去關聯查詢嘛,當然不能這麼多關聯來查詢資料,我們可以只查詢一個表即可,這怎麼講?這裡分享表是主表,我們可以在主表裡建立一個緩衝欄位。比如我們叫cache_data欄位,賦予它text類型,這樣可以儲存很長的字串,而不至於超過欄位的最大儲存。

這個緩衝欄位怎麼用呢?在新增一條分享資訊後,產生分享ID。如果使用者發布圖片或檔案的話,圖片資訊入圖片表,檔案資訊入檔案表,然後把新產生的圖片或檔案資訊寫入到緩衝欄位裡。同樣的,如果使用者有選擇分類、打了標籤的話,也把相應的資訊寫入到緩衝欄位裡。對於評論而言,沒有必要把全部評論存到緩衝欄位裡,因為你不知道他有多少條記錄,可以把最新的10條存到緩衝欄位裡用於顯示,這樣緩衝欄位就變成一個二維或三維數組,序列化後儲存到分享表裡。

array(‘img‘ = array(name => ‘123.jpg‘,url  => ‘http://tech.42xiu.com/123.jpg‘,width  => 800,width  => 600,),‘file‘ = array(name => ‘abc.zip‘,download_url  => ‘http://tech.42xiu.com/abc.zip‘,size  => 1.2Mb,),‘category‘ = array(1 => array(id => 5,name => PHP樂知部落格),2 => array(id => 6,name => PHP技術部落格),),‘tag‘ => array(tag1tag2......),‘message‘ => array(1 => array(id, uid, name, content, time),2 => array(id, uid, name, content, time),3 => array(id, uid, name, content, time),4 => array(id, uid, name, content, time),),)//比如,上面的數組結構,序列化存入資料庫。UPDATE share SET cache_data=mysql_real_escape_string(serialize($cache_data)) WHERE id=1;

這樣查詢就變得簡單了,只需要查詢一條就行了,取到緩衝欄位,把其還原序列化,把數組資訊提取出來,然後顯示到頁面。如果是以前那個結構,在幾十萬的資料量下,估計早崩潰了。資料緩衝的方法也許不是最好的,如果你有更好的方法,可以相互學習,相互討論。

mark---[mysql多表關聯查詢的最佳化方法]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.