成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

「MySQL數據庫」MySQL的分表與分區

數據庫 MySQL
從表面意思上看,MySQL分表就是將一個表分成多個表,數據和數據結構都有可能會變。MySQL分表分為垂直分表和水平分表。

MySQL分表分區是解決大數據量導致MySQL性能低下的兩種方法。

什么是MySQL分表

從表面意思上看,MySQL分表就是將一個表分成多個表,數據和數據結構都有可能會變。MySQL分表分為垂直分表和水平分表。

1、垂直分表

垂直分表是按表中的字段來劃分的,如下圖所示。

在上圖中,我們將本來分布在同一張表中的C1、C2、C3、C4四個字段垂直劃分到兩個表中。第一張表中分布C1、C3、C4三個字段,第二張表中分布C1、C2兩個字段。拆分后的兩個表通過C1這個共同的字段關聯起來。

2、水平分表

水平分表是按表中的記錄來劃分的。如下圖所示。

在上圖中,我們將本來分布在同一張表中的四條記錄,水平拆分到兩個表中。第一張表中,分布兩條記錄;第二張表中,分布兩條記錄。

3、分表操作

MySQL分表既可以自定義規則,也可以使用業內通用規則,還可以使用merge存儲引擎來實現。

1)自定義規則

按照用戶或業務的編號分表。對與用戶或業務可以按照編號%n,進行分成n表。

按照日期分表。對于日志或統計類等的表。可以按照年,月,日,周分表。

2)使用Merge存儲引擎

使用Merge存儲引擎實現MySQL分表比較適合那些沒有事先考慮分表,隨著數據的增多,已經出現了數據查詢慢的情況。使用Merge存儲引擎實現MySQL分表可以避免改代碼。使用Merge實現MySQL分表可以按如下形式操作:

在上圖中,ENGINE = MERGE表示,使用merge引擎。另外ENGINE = MRG_MyISAM是一樣的意思。UNION = (user1, user2)表示,掛接了user1、user2表,INSERT_METHOD = LAST表示插入方式:0不允許插入,FIRST插入到UNION中的第一個表,LAST插入到UNION中的最后一個表。

使用Merge存儲引擎實現MySQL分表,分表后的結果會分為主表和子表,主表類似于一個殼子,邏輯上封裝了子表,實際上數據都是存儲在子表中的。如下圖所示。

上圖是對user表進行merge分表的結果,alluser是總表,user1和user2是分表。每一個表都有自己的表結構,子表而且還保存了數據和索引,總表沒有保存數據和索引,總表只保存了分表的關系,以及插入數據的方式。

4、分表查詢

對于分表后的查詢操作,依然是聯合查詢,視圖等基本操作,或者使用merge引擎合并數據并在此表中查詢。復雜一些操作需要借助存儲過程來完成,借助外部工具實現對分表的管理。如:

  • 垂直分表的使用join連接、水平分表的使用union連接。
  • 對于使用Merge存儲引擎實現的MySQL分表,可以直接查詢總表。

5、注意事項

1)重復記錄 / 重復索引

若建立Merge表前,分表t1 / t2已經存在,并且t1 / t2中存在重復記錄。查詢時,遇到滿足記錄的條目就會返回。意思就是只會顯示一條記錄,同時不會報錯。若建立Merge表后,insert / update時,出現重復索引,則會提示錯誤。MERGE表只對建表之后的操作負責。

2)如何刪除一個分表

不能直接刪除一個分表,這樣會破壞Merge表。正確的方法是: 

  1. alter table t ENGINE = MRG_MyISAM UNION = (t1) INSERT_METHOD = LAST;  
  2. drop table t1;  

3)誤刪Merge總表

誤刪Merge表,是不會造成數據丟失的,只需重新創建總表。

什么是MySQL分區

從表面意思看,MySQL分區就是將一張表的數據分成多個存儲區塊,而數據結構不變。另外,這些存儲區塊既可以在同一個磁盤上,也可以在不同的磁盤上。如下圖所示。

上圖是對表aa進行分區后,磁盤上的文件分布。從圖中我們可以看到,分區后aa表的數據結構沒有發生變化,而數據和索引存儲的位置由原來的一個變成了兩個。另外,多出了一個.par文件,打開.par文件后你可以看出他記錄了這張表的分區信息。

1、分區操作

MySQL從5.1.3開始支持Partition,你可以使用如下命令來確認你的版本是否支持Partition:

MySQL支持的分區類型包括Range、List、Hash、Key,其中Range比較常用:

1)Range(范圍) – 這種模式允許DBA將數據劃分不同范圍。例如DBA可以將一個表通過年份劃分成三個分區,80年代(1980's)的數據,90年代(1990's)的數據以及任何在2000年(包括2000年)后的數據。如下:

在這里,將用戶表分成4個分區,以每300萬條記錄為界限,每個分區都有自己獨立的數據、索引文件的存放目錄。

2)List(預定義列表) – 這種模式允許系統通過DBA定義的列表的值所對應的行數據進行分割。例如:DBA根據用戶的類型進行分區。

3)Key(鍵值) – 上面Hash模式的一種延伸,這里的Hash Key是MySQL系統產生的。

4)Hash(哈希) – 這中模式允許DBA通過對表的一個或多個列的Hash Key進行計算,最后通過這個Hash碼不同數值對應的數據區域進行分區,。例如DBA可以建立一個對表主鍵進行分區的表。

2、注意事項

1)以上每一種分區方式,都可以將這些分區所在的物理磁盤分開完全獨立,以提高磁盤IO吞吐量。如下:

上圖就是對Range(范圍)分區類型進行物理空間的分離操作。

2)分區雖然很爽,但目前的實現還有很多限制:

  • 主鍵或者唯一索引必須包含分區字段:如PRIMARY KEY(i,created)。
  • 很多時候,使用了分區就不要再使用主鍵,否則可能影響性能。
  • 只能通過int類型的字段或者返回int類型的表達式來分區:通常使用YEAR或TO_DAYS等函數。
  • 每個表最多1024個分區:不可能無限制的擴展分區,而且過度使用分區往往會消耗大量系統內存。
  • 采用分區的表不支持外鍵:相關的約束邏輯必須通過程序來實現。

MySQL分表和分區的異同

都能提高mysql的性高,在高并發狀態下都有一個良好的表現。

分表和分區不矛盾,可以相互配合的,對于那些大訪問量,并且表數據比較多的表,我們可以采取分表和分區結合的方式(如果merge這種分表方式,不能和分區配合的話,可以用其他的分表試),訪問量不大,但是表數據很多的表,我們可以采取分區的方式等。

分表技術是比較麻煩的,需要手動去創建子表,app服務端讀寫時候需要計算子表名。采用merge好一些,但也要創建子表和配置子表間的union關系。

表分區相對于分表,操作方便,不需要創建子表。

 

 

責任編輯:龐桂玉 來源: 今日頭條
相關推薦

2010-05-11 18:23:31

MySQL數據庫分區

2010-10-13 11:54:00

MySQL數據庫表

2010-06-04 10:49:56

MySQL數據庫分區

2010-06-12 17:48:45

MySQL數據庫表

2009-02-02 13:16:23

修復數據表MySQL

2011-05-18 13:16:21

MySQL數據庫鎖定

2010-06-10 13:42:51

MySQL數據庫

2010-05-26 10:15:11

MySQL數據庫

2011-07-28 17:02:59

MYSQL數據庫跨表更新數據并合

2010-10-15 16:20:59

MySQL數據庫表

2020-01-03 16:30:14

數據庫讀寫分離分庫

2011-08-23 15:16:54

OracleMySQL

2010-06-11 16:51:44

MySQL數據庫

2020-05-20 18:40:11

MySQL回表與索引數據庫

2023-09-14 23:05:57

? ?MySQL數據庫

2019-12-13 10:31:45

數據庫SQLMySQL

2010-06-13 10:18:08

MySQL 數據庫函數

2011-03-02 09:09:53

MySQL分區管理細節

2022-06-15 07:32:24

數據庫分庫分表

2011-07-06 10:49:50

MySQL優化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜精品 | 亚洲精品99999| 亚洲成人一级片 | 91中文字幕在线观看 | 久久91 | 成人影院在线视频 | 99精品国产一区二区三区 | 亚洲精品一区二区三区蜜桃久 | 久久免费精品视频 | 中文字幕在线一区二区三区 | 精品免费视频 | 高清亚洲 | 国产精品成人国产乱一区 | 999热精品 | 精产国产伦理一二三区 | 久久av综合 | 欧州一区二区三区 | 久久精品综合 | 国产亚洲精品美女久久久久久久久久 | 日韩精品一区二区三区高清免费 | 国产99视频精品免视看9 | 欧美国产中文 | 欧美嘿咻| 亚洲欧美日韩国产综合 | 精品综合在线 | 亚洲a级| 欧美黑人又粗大 | 伊人影院99 | 中文字幕一区二区三区精彩视频 | 亚洲一区国产精品 | 美女网站视频免费黄 | 一区免费观看 | 国产精品欧美一区二区三区不卡 | 亚洲九九精品 | 综合激情av | 亚洲精品中文字幕在线观看 | 国产精品一区久久久 | 99久热在线精品视频观看 | 国产精品中文在线 | 国产一级片免费在线观看 | 91社区在线高清 |