今天咱們來學習MYSQL的分庫分表sql
分庫分表是爲了解決因爲數據量過大而致使數據庫性能下降的問題,將原來獨立的數據庫拆分紅若干數據庫組成,將數據大表拆分紅若干數據表組成,使得單一數據庫、單一數據表的數據量變小,從而達到提高數據性能的目的。 數據庫
案例:將商品信息表和商品描述表放在商品庫,店鋪表放在店鋪庫。bash
案例:將商品表分紅兩個字段類型同樣的商品表,分到兩個不一樣的服務器數據庫中。服務器
垂直分庫:把不一樣表分到不一樣的數據庫中(商品表和店鋪表)網絡
水平分庫:把不一樣數據分到不一樣數據庫中(商品表分紅兩個類型同樣的表分到不一樣數據庫中)框架
案例:將商品信息表按照訪問頻率分爲兩個表,商品信息和商品描述表 分佈式
案例: 將同一個庫中的商品表的數據分紅兩個商品表中,能夠在一個或多個庫中函數
垂直分表和水平分表的區別:性能
垂直分表: 將一個表按照字段訪問的頻次分到多個表中,能夠是一個或多個數據庫(分的是字段) 水平分表: 將一個表按照數據分到多個表中,能夠是一個或多個數據庫(分的是數據)學習
數據庫代理方式訪問:
非代理方式訪問:SQL語句直接訪問數據庫服務器,比代理方式訪問快。
一、解析路由(找對應數據源、表):根據業務功能、SQL解析等方式,找到要訪問的數據源和表
二、執行相應表的功能(根據sql實現具體功能)
三、對查詢結果集進行合併,二次處理。(合併查詢結果集,執行子查詢)
四、是否有事務(處理不一樣方式的事務)
推薦使用DAO層實現方式
分庫分表能有效的緩解單機和單庫帶來的性能瓶頸和壓力,突破網絡IO、硬件資源、鏈接屬的瓶頸,同時也帶來了一些問題
一、事務一致性問題
分庫分表把數據分佈到不一樣的數據庫服務器,不可避免帶來分佈式事務問題
二、跨節點關聯查詢
原本能夠經過join鏈接查詢的sql語句,如今得兩次查詢
第一次:查到關聯數據的id。
第二次:根據id找到對應的數據。
三、跨節點分頁、排序函數
合二爲一
全局主鍵解決主鍵重複問題
例如:地區表(商品表和店鋪表的依賴公共表)
在每一個數據庫服務中都創建公共表,全部對公共表的更新操做都同時發送到全部分庫執行。
小夥伴們,對於MYSQL數據庫的分庫分表理論就介紹到這裏了,下期咱們用sharding-JDBC框架來實現吧!!!
get到的小夥伴記得點贊👍+關注哦!小紅♥走起來!!!😘😘😘
複製代碼