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