mysql多表關聯查詢的優化方法

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

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

購物分享的關鍵表有:分享表、圖片表、文件表、評論表、標籤表、分類表等。
圍繞分享的表就麼多,哇,那也很多啊。當咱們查看一個圖片的詳細信息時,就要顯示以上表裏的信息。顯示圖片所屬的分類、給圖片打的標籤、圖片的評論、有文件的話還要顯示文件下載信息等。難道讓咱們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(
		tag1
		tag2
		......
	),

	'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;

這樣查詢就變得簡單了,只須要查詢一條就好了,取到緩存字段,把其反序列化,把數組信息提取出來,而後顯示到頁面。若是是之前那個結構,在幾十萬的數據量下,估計早崩潰了。數據緩存的方法也許不是最好的,若是你有更好的方法,能夠相互學習,相互討論。 緩存

本文由PHP樂知博客提供 http://tech.42xiu.com 學習

相關文章
相關標籤/搜索