MySQL 主從伺服器的一些技巧

2021-09-30 06:59:04 字數 1915 閱讀 5529

問題:主從伺服器表型別的選擇

一般的共識是主伺服器使用innodb,事務,行鎖等功能是myisam 所沒有的,對

修改操作而言,它更高效;從伺服器使用myisam,全文檢索功能是innodb 所沒有的,

對查詢操作而言,它更高效。這樣就可以各盡其能。

問題:主從伺服器字段型別的選擇

字段型別對於分頁等操作有很大影響。主伺服器一般是innodb,因為不涉及查詢,

所以可以使用varchar 等來儲存字串來節省空間,從伺服器一般是myisam,因為涉

及查詢,所以必須在char 和varchar 之間仔細權衡,沒有varchar、text、blob 欄位的

表是靜態表,反之是動態表,靜態表的檢索效率要比動態表好若干倍,一般來說,所

有涉及大結果集的查詢都應該盡可能保證在靜態表上完成,這裡說乙個例子:比如說

常見的articles 表有title(varchar),body(text)等字段,在做文章列表的時候,因為不是

靜態表,所以查詢不會很快,下面開始重構解決方案:把原來的articles 表拆分成

subjects 表和contents 表,title 字段設定為乙個足夠的char 型別放在subjects 表裡,body

欄位還保持是text 型別放到contents 表裡,subjects 和contents 表之間的關係是一對多,

這樣,順帶著也方便的實現了多頁文章的功能,而且更重要的是在查詢文章列表的時

候,操作都是在subjects 靜態表裡完成,效率肯定會比前一種方案提公升很多。

強調:myisam 裡靜態表和動態表的區別對效能影響極大,但我敢說很大一部分

使用者並沒有注意過這一點!如果你就是其中之一,那麼我強烈建議你再次體會一下

前面說的articles 分解為subjects/contents 的過程,相信你熟悉了以後,下乙個應用的

速度會有質的提公升。

問題:主從伺服器now()函式造成資料不一致

假設在主伺服器上執行一條insert….values(…,now()),那麼在從伺服器上

也會同樣執行一條的sql 語句,但是主從伺服器各自的時間設定可能不一致(比如

說時區不同),now()在兩台伺服器上的結果就可能不一致。在mysql5.1 裡,將支

持行複製,那時候就不存在這個問題了。不過不管怎麼說,都不應該在程式裡使用

now(),時間的計算在應用程式裡完成。這裡介紹乙個額外的小技巧:獲得時間戳,

和time()相比,$_server[『request_time』]少做了一次系統呼叫,不過是否合

適要視客觀情況而定。

問題:主從伺服器讀寫分離時讀操作失敗

先重現一下問題:比如說新增一條新資料,新增成功後根據last_insert_id 跳轉到

新新增資料的瀏覽頁面。在此過程中新增新資料的操作是在主伺服器上完成的,瀏覽

新資料的操作實在從伺服器上完成的,不過由於主從伺服器間sql 同步存在延遲,

所以當使用last_insert_id 在從伺服器上查詢的時候,從伺服器很可能還沒有還沒來得

及同步到此記錄,所以讀操作失敗。解決思路也不複雜,在**裡加入乙個快取層(可

以使用memcached),新新增的資料都順手放到快取層裡乙份,新資料的讀操作也先

查詢快取層,這樣就不會再有讀操作失敗的問題了,當然刪除或者更新資料的時候也

要順帶著處理好快取資料,可以使用觀察者模式來搞定。不過這樣快取方案只限於讀

取單一的記錄,對於讀取列表的記錄的情況,則是無效的。

問題:主從伺服器索引是否有必要保持一致

一般都是利用主從伺服器完成讀寫分離,從伺服器上進行讀操作,主伺服器進行

寫操作,這樣的話,主伺服器上僅保留主鍵,外來鍵,唯一索引等必要的索引即可,以

便保持資料合法性,而對於那些原本用於優化select 操作的索引,可以全部刪除,

如此的話主伺服器的寫操作效率會提公升很多。

MySQL主從伺服器的一些技巧

問題 主從伺服器表型別的選擇 一般的共識是主伺服器使用innodb,從伺服器使用myisam,以便各盡其能。問題 主從伺服器字段型別的選擇 字段型別對於分頁等操作有很大影響。主伺服器一般是innodb,因為不涉及查詢,所以可以使用varchar等來儲存字串來節省空間,從伺服器一般是 myisam,因...

MySQL主從伺服器的一些技巧

問題 主從伺服器表型別的選擇 一般的共識是主伺服器使用innodb,事務,行鎖等功能是myisam所沒有的,對修改操作而言,它更高效 從伺服器使用myisam,全文檢索功能是innodb所沒有的,對查詢操作而言,它更高效。這樣就可以各盡其能。問題 主從伺服器字段型別的選擇 字段型別對於分頁等操作有很...

MySQL主從伺服器的一些技巧

原文 問題 主從伺服器表型別的選擇 一般的共識是主伺服器使用innodb,事務,行鎖等功能是myisam所沒有的,對修改操作而言,它更高效 從伺服器使用myisam,全文檢索功能是innodb所沒有的,對查詢操作而言,它更高效。這樣就可以各盡其能。問題 主從伺服器字段型別的選擇 字段型別對於分頁等操...