Mysql千萬級大表優化——分區、分庫、分表


https://www.zhihu.com/question/19719997/answer/549041957

1.分區:其實就是形成分區表(每個分區相當於獨立有數據 + 索引)

https://www.cnblogs.com/GrimMjx/p/10526821.html

https://blog.csdn.net/qq_39390545/article/details/107144859

對用戶來說,分區表是一個獨立的邏輯表,但是底層由多個物理子表組成,實現分區的代碼實際上是通過對一組底層表的對象封裝,但對SQL層來說是一個完全封裝底層的黑盒子。

MySQL實現分區的方式也意味着索引也是按照分區的子表定義,沒有全局索引。

分區的意思是指將同一表中不同行的記錄分配到不同的物理文件中,幾個分區就有幾個.idb文件,不是我們剛剛說的區。MySQL數據庫的分區是局部分區索引,一個分區中既存了數據,又放了索引。也就是說,每個區的聚集索引和非聚集索引都放在各自區的(不同的物理文件)

分區的好處是:

  • 可以讓單表存儲更多的數據
  • 分區表的數據更容易維護,可以通過清楚整個分區批量刪除大量數據,也可以增加新的分區來支持新插入的數據。另外,還可以對一個獨立分區進行優化、檢查、修復等操作
  • 部分查詢能夠從查詢條件確定只落在少數分區上,速度會很快
  • 分區表的數據還可以分布在不同的物理設備上,從而搞笑利用多個硬件設備

分區的類型:

  • RANGE分區:基於屬於一個給定連續區間的列值,把多行分配給分區
  • LIST分區:類似於按RANGE分區,區別在於LIST分區是基於列值匹配一個離散值集合中的某個值來進行選擇
  • HASH分區:基於用戶定義的表達式的返回值來進行選擇的分區,該表達式使用將要插入到表中的這些行的列值進行計算。這個函數可以包含MySQL中有效的、產生非負整數值的任何表達式
  • KEY分區:類似於按HASH分區,區別在於KEY分區只支持計算一列或多列,且MySQL服務器提供其自身的哈希函數。必須有一列或多列包含整數值

注:分區和分表的區別 

https://www.cnblogs.com/langtianya/p/4997768.html

  • mysql的分表是真正的分表,一張表分成很多表后,每一個小表都是完正的一張表
  • 分區不一樣,一張大表進行分區后,他還是一張表,不會變成二張表,但是他存放數據的區塊變多了(每個區塊可以存在不同的磁盤上,以此提高mysql的磁盤IO性能)

a)分表后,單表的並發能力提高了,磁盤I/O性能也提高了。並發能力為什么提高了呢,因為查尋一次所花的時間變短了,如果出現高並發的話,總表可以根據不同 的查詢,將並發壓力分到不同的小表里面。磁盤I/O性能怎么搞高了呢,本來一個非常大的.MYD文件現在也分攤到各個小表的.MYD中去了。

b)mysql提出了分區的概念,我覺得就想突破磁盤I/O瓶頸,想提高磁盤的讀寫能力,來增加mysql性能。
在這一點上,分區和分表的測重點不同,分表重點是存取數據時,如何提高mysql並發能力上;而分區呢,如何突破磁盤的讀寫能力,從而達到提高mysql性能的目的。

 

2.分表

分表就是把一張大表,按照如上過程都優化了,還是查詢卡死,那就把這個表分成多張表,把一次查詢分成多次查詢,然后把結果組合返回給用戶。

分表分為垂直拆分和水平拆分,通常以某個字段做拆分項。比如以id字段拆分為100張表: 表名為 tableName_id%100

但:分表需要修改源程序代碼,會給開發帶來大量工作,極大的增加了開發成本,故:只適合在開發初期就考慮到了大量數據存在,做好了分表處理,不適合應用上線了再做修改,成本太高!!!

分表需要有一個全局唯一的索引,我理解螞蟻金服的百表會分別進行查詢,而不是路由到具體的表進行查詢???【其實應該可以路由到具體的表進行查詢?】
 
 
3.分庫

把一個數據庫分成多個,需要有路由機制,確定某個請求會轉發到哪個id的庫上(螞蟻金服現在是百庫百表)

 


4.分布式數據庫中間件

  • 一個應用對應——數據源分片集群——(group id)數據源分片——彈性數據源(彈性位 + 物理數據源)
  • 彈性位:可以動態擴展物理數據源、利用彈性路由規則  實現流量的切換
  • 全局唯一的自增id
    • 有一個表,里面存了各業務的主鍵值
    • 使用”時間 + 自增主鍵值“生成全局唯一的id
    • 並且主鍵值的自增是每次取1000個,緩存在應用本地,避免主鍵表成為一個熱點


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM