通過一些HASH算法或者工具實現將一張數據表垂直或者水平進行物理切分
適用場景
1、單表記錄條數達到百萬或千萬級別時
2、解決表鎖的問題
分表方式
水平分表:表很大,分割后可以降低在查詢時需要讀的數據和索引的頁數,同時也降低了索引的層數,提高查詢次數

適用場景
1、表中的數據本身就有獨立性,例如表中分表記錄各個地區的數據或者不同時期的數據,特別是有些數據常用,有些不常用。
2、需要把數據存放在多個介質上。
例子:qq登錄, 由於qq號特別多, 現在通過取模算法, 來對sql優化, 分99張表, 通過100取模, 余數就是這條數據判定的表!!!
水平切分的缺點
1、給應用增加復雜度,通常查詢時需要多個表名,查詢所有數據都需UNION操作
2、在許多數據庫應用中,這種復雜度會超過它帶來的優點,查詢時會增加讀一個索引層的磁盤次數
垂直分表
把主鍵和一些列放在一個表,然后把主鍵和另外的列放在另一個表中

適用場景
1、如果一個表中某些列常用,另外一些列不常用
2、可以使數據行變小,一個數據頁能存儲更多數據,查詢時減少I/O次數
例子: 上圖是垂直分割, 有一張成績表, 里面有學生id,學生姓名,學生題目, 學生答案, 但是你會發現sql語句是
select * from tt where id ="8"; 這時候查全表, 會有題目 和 答案, 這個表就比較大, 這時候把題目,和答案分出去, 留一張信息表就可以了, 查詢的時候直接查詢信息表, 而不用查詢題目和答案, 不過大型企業項目都會把一些大文件存放在專門的圖片或者文件服務器中,所以這些我們都不需要考慮了
缺點
分表缺點
有些分表的策略基於應用層的邏輯算法,一旦邏輯算法改變,整個分表邏輯都會改變,擴展性較差
對於應用層來說,邏輯算法增加開發成本
MySQL的復制原理及負載均衡
MySQL主從復制工作原理
在主庫上把數據更高記錄到二進制日志
從庫將主庫的日志復制到自己的中繼日志
從庫讀取中繼日志的事件,將其重放到從庫數據中
MySQL主從復制解決的問題
數據分布:隨意開始或停止復制,並在不同地理位置分布數據備份
負載均衡:降低單個服務器的壓力
高可用和故障切換:幫助應用程序避免單點失敗
升級測試:可以用更高版本的MySQL作為從庫
解題方法
充分掌握分區分表的工作原理和適用場景,在面試中,此類題通常比較靈活,會給一些現有公司遇到問題的場景,大家可以根據分區分表,MySQL復制、負載均衡的適用場景來根據情況進行回答
真題
設定網站用戶數量在千萬級,但是活躍用戶數量只有1%,如何通過優化數據庫提高活躍用戶訪問速度?
答:
可以使用 ,把活躍用戶分在一個區,不活躍用戶分在另外一個區,本身活躍用戶區數據量比較少,因此可以提高活躍用戶訪問速度。
還可以水平分表,把活躍用戶分在一張表,不活躍用戶分在另一張表,可以提高活躍用戶訪問速度。
