MySQL單機優化---分表、分區、分庫

1、分表:數據庫

  水平分表:根據條件把數據分爲N個表(例如:商品表中有月份列,則能夠按月份進行水平分表)。服務器

    使用場景:一張表中數據太多,查詢效率太慢。併發

     當須要同時查詢被水平分表的多張表時:函數

       在兩條SQL語句中間加union,就能把兩表數據合併展現。性能

      union:數據合併時去重。優化

       Union all:數據合併展現不去重。spa

 

  垂直分表:將表的字段拆出來變成一張表,兩表經過外鍵創建一對一關係。it

    使用場景:有些表記錄數並很少,可是字段卻很長,表佔用空間很大,檢索表時須要執行大量I/O,嚴重下降了性能。io

     當須要同時用到兩表的數據時,能夠經過 left  join 進行兩表查詢。效率

 

2、分庫:(配置多數據源)

    垂直分庫:根據不一樣業務將不一樣的表分到不一樣的數據庫。

    水平分庫:將同一張表中的數據分到不一樣的數據庫中。

 

3、分區:

    表沒變,可是保存表數據的從一個文件被分紅了多個文件,用戶感知不到。

    分區的做用:     

       select *f rom dept where id in (1m2,3,4)

 

      從MySQL 5.1 中新增了分區(Partition)功能,優點也愈來愈明顯了:

 

          --與單個磁盤或文件系統分區相比,能夠存儲更多的數據

 

          --很容易就能刪除不用或者過期的數據

 

          --一些查詢能夠獲得極大的優化 能夠併發查詢

 

          --涉及到 SUM()/COUNT() 等聚合函數時,能夠併發進行

 

          --IO吞吐量更大(多臺服務器)

     分區的方式:       

        常見分區方式:

 

          Range(範圍       –基於一個給定的連續空間,把數據分配到不一樣分區。1-10 11-20

 

          List(預約義列表) –相似Range分區,區別在List分區是基於枚舉出的值列表分區,而  Range分區是根據給定的連續區間範圍分區 1,23   45,6

 

          Hash(哈希)–這中模式容許經過對錶的一個或多個列的Hash Key進行計算,最後經過這個Hash碼不一樣數值對應的數據區域進行分區。例如能夠創建一個對錶主鍵進行分        區的表。這個根據給定的分區個數,把數據分配到不一樣的分區。

 

          Key(鍵值)-上面Hash模式的一種延伸,這裏的Hash KeyMySQL系統產生的。

相關文章
相關標籤/搜索