水平分表:
根據主要查詢條件需拆分,列入一般我們查詢的時候都是去用id去查
1、 我們先來解決多張表使用唯一的自增id,我 目前看文章看懂的是 可以單獨建立一張去記錄MaxId , 也可以用函數去做,但是我沒太明白所以就不講了,
2、 根據id來判斷扔哪張表, 加入有5張,我們來取模 用戶id%5 =存在哪張表內, 計算這種的公式也有很多,也可以用Hash的,
3、 那我們查數據的時候 需要確定那張表 就需要跑公式去找了,但一定要有主查詢條件哈~
4、 缺點就是維護量大- -複雜,推薦能不分就不分 ,例如:升級硬件、升級網絡、讀寫分離、索引優化等等。當數據量達到單表的瓶頸時候,再考慮分庫分表。
原因:
1.根據MySQL索引實現原理及相關優化策略的內容我們知道Innodb主索引葉子節點存儲着當前行的所有信息,所以減少字段可使內存加
載更多行數據,有利於查詢。
2.受限於操作系統中的文件大小限制。
垂直分表:
1、根據業務判斷你的字段 有哪些熱字段 冷字段, 熱一組,冷一組 分開,這樣可以減少字段數量,然後再把大字段入text類型的那種可以分出去,
2、不過查詢的時候也有弊端, 冷數據並不是不要,需要的時候也要join,
原因:
1.隨着數據量的增大,table行數巨大,查詢的效率越來越低。表很大,分割後可以降低在查詢時需要讀的數據和索引的頁數,同時也
降低了索引的層數,提高查詢速度。
2.同樣受限於操作系統中的文件大小限制,數據量不能無限增加,當到達一定容量時,需要水平切分以降低單表(文件)的大小。