1. 程式人生 > >MySQL優化分庫分表,為什麼要分表,分表以後如何進行排序查詢,業務如何設計?

MySQL優化分庫分表,為什麼要分表,分表以後如何進行排序查詢,業務如何設計?

MySQL優化分庫分表,為什麼要分表,分表以後如何進行排序查詢,業務如何設計?

昨天面試新人的時候,遇到了這麼一個問題,按照自己的想法大體聊了一些,但大多是感性的,並沒有完整的瞭解why and how.

今天查了一些相關的資料,包括《MySQL效能調優與架構設計》、《高效能Mysql》,慢慢的整體理解,請大家指正。

之一,為什麼要分表?

分表,按形式,有水平分表和主附分表。
水平分表常見於按ID取模或者按日期將相同表結構的內容雜湊到不同的表上,主附分表常見於有對應關係的多張表,通過主外來鍵進行關聯。

1,解決磁碟系統最大檔案限制

如大家所知,各檔案系統對單個檔案大小的限制是不一樣的。
雖然在現代網站架構設計中,這個問題基本上不用考慮,但在面試時,如果能回答上來這點,可以讓體現出較不錯的計算機基礎功底。
FAT16(最大分割槽2GB,最大檔案2GB ,最大容量?)
FAT32(最大分割槽32GB,最大容量2TB,最大檔案32G)
NTFS(最大分割槽2TB,最大容量,最大檔案2TB)
ext3(最大檔案大小: 2TB,最大檔案極限: 僅受檔案系統大小限制,最大分割槽/檔案系統大小: 4TB,最大檔名長度: 255 字元)

2,減少增量資料寫入時的鎖對查詢的影響,減少長時間查詢造成的表鎖,影響寫入操作等鎖競爭的情況
資料越來越多,查詢邏輯比較複雜的情況下,可能造成表鎖和行鎖,會影響到正常的讀寫需求,如果把資料進行分表,典型的情況有按ID和日期進行分表,讀取舊資料和寫入新資料的操作在不同的表裡,這樣就可以避免單張表間產生的鎖競爭,節省排隊的時間開支,增加呑吐量。
需要注意的是,這裡說的減少鎖和排隊的時間開支,並沒有確切的說減少了cpu的運算開支,因為分表以後的運算需求還可能在同一臺裝置上。如果使用了分庫分表則能取得更好的運算速度提升。

3,同2,由於單表數量下降,常見的查詢操作由於減少了需要掃描的記錄,使得單表單次查詢所需的檢索行數變少,減少了磁碟IO,時延變短。

 

來源:https://blog.csdn.net/u010412301/article/details/78534203