mysql分表的原則 Mysql分表準則

2021-10-17 16:58:33 字數 2678 閱讀 7111

mysql分表準則 在大量使用mysql時,資料量大、高訪問時,為了提高效能需要分表處理,簡介下mysql分表的標準,後續會繼續補充 環境: 業務型別:oltp 硬體: cpu:8cpu 2.4ghz mem:48g 磁碟:raid5 6sas 什麼樣的表需要拆分:根據表的體積、表的行數、訪問特

mysql分表準則

在大量使用mysql時,資料量大、高訪問時,為了提高效能需要分表處理,簡介下mysql分表的標準,後續會繼續補充

環境:業務型別:oltp

硬體:cpu:8cpu 2.4ghz

mem:48g

磁碟:raid5 6×sas

什麼樣的表需要拆分:根據表的體積、表的行數、訪問特點來衡量表是否需要拆分

一.拆分標準是:

1.表的體積大於2g或行數大於1000w,以單錶主鍵等簡單形式訪問資料,這個時候需要分表

2.表的體積大於2g或行數大於500w,以兩表jion,小範圍查詢(結果集小100行)等形式訪問資料,這個時候需要分表

3.表的體積大於2g或行數大於200w,以多表join,範圍查詢,order by,group by,高頻率等複雜形式訪問資料,尤其dml,這個時候需要分表

4.表的字段中含有text等大字段的、varchar(500)以上的、很少使用的字元型字段拆分成父子表,這種分表可以和以上聯合使用

5.資料有時間過期特性的,需要做資料分表歸檔處理

只要達到上面任何乙個標準,都需要做分表處理

二.分表方法:

1.冷熱資料分表:適用小訪問量,冷資料很少使用

1.1 單表字段很多,把頻繁使用整型欄位的和非頻繁使用的字元型字段或大字段拆到兩個表中

1.2 表資料具有時間過期性,把過期資料拆分到歷史表裡或者按時間梯度分表

2.橫向分表:適用大訪問量

2.1 如雜湊等分切表或其他基於對某數字取餘的切表,優點是方便資料分布,缺點是無法再擴充套件

2.2 按主鍵id遞增分表,比如每100w個id乙個分表,優點是方便擴充套件,缺點是壓力不均

2.3 按日期分表,比如每天、每月、每年乙個分表,優點是方便擴充套件,缺點是壓力不均

說明1.表的體積如何預估

create table `td_skate` (

`valid` bigint(20) not null auto_increment comment '值id',

`propertyid` bigint(20) null default null comment '屬性id',

`text` varchar(400) null default null,

`entext` varchar(400) null default null,

`isother` bigint(20) null default null comment '是否是other值, 0 否 1 是',

`createtime` datetime null default null comment '建立時間',

`createuser` bigint(20) null default null comment '建立使用者',

`lastmodify` datetime null default null comment '最後修改時間',

`updatetimeuser` bigint(20) null default null comment '最後修改人',

`deletetime` datetime null default null comment '刪除時間',

`deleteuser` bigint(20) null default null comment '刪除人',

`description` varchar(4000) null default null comment '產品描述',

`isdelete` int(11) null default '0',

primary key (`valid`),

index `fk_td_prodline_attrval_td_prodline_attr` (`propertyid`),

constraint `fk_td_prodline_attrval_td_prodline_attr` foreign key (`propertyid`) references `td_prodline_attr` (`propertyid`)

collate='utf8_general_ci'

engine=innodb

auto_increment=2491650;

把錶的所有字段占用位元組數相加,再乘以預估行數就是表的體積,比如上面的表,預估有1000w,那他的體積是

(8+8+400+400+200+8+8+8+8+8+8+8+4000+8)×10000000=50.8g,可以看到這個表設計非常不合理,可以修改如下:

int替代bigint

timestamp替代datetime

狀態位isdelete用tinyint替代

根據業務特點看能否把varchar(4000)放到乙個字表中

優化後表大小:(4+4+400+400+200+4+4+4+4+4+4+4+1)×10000000=10.37g,如果要進一步提公升效能,需要刪除外來鍵,分表,保證單錶在2g以下。

如果需要檢視description資訊,通過主鍵關聯檢視子表,只會掃瞄有效的子表資訊, 效能將會提公升非常大。

2.表的行數預估就很簡單,根據業務特點,訪問量等預估

-------end------

mysql分表準則 Mysql分表準則

mysql分表準則 在大量使用mysql時,資料量大 高訪問時,為了提高效能需要分表處理,簡介下mysql分表的標準,後續會繼續補充 環境 業務型別 oltp 硬體 cpu 8cpu 2.4ghz mem 48g 磁碟 raid5 6 sas 什麼樣的表需要拆分 根據表的體積 表的行數 訪問特點來衡...

mysql分表技巧 MySQL分表操作的方法分析

本節內容 mysql分表 一般來說,當資料庫的資料超過了100w記錄時就應該考慮分表或者分割槽了。本文介紹下mysql分表的一些方法。首先,需要想好到底分多少個表,前提當然是滿足應用。這裡使用了乙個比較簡單的分表方法,就是根據自增id的尾數來分,也就是說分0 9一共10個表,其取值也很好做,就是對1...

mysql 建表原則 MySql基本的建表原則

1.定長和變長的分離 如int,char,time所佔位元組是固定的字段放在一張表 如varchar,text所佔位元組不確定的字段放在一張表中 2.常用字段和不常用字段進行分離,根據查詢頻率來設計 3.一對多的關聯表可以新增冗餘字段,如商品分類表 和商品表 在首頁中需要顯示每個分類商品總數.解決方...