1.分表型別
分表有兩種形式:分別是水平分表和垂直分表:
水平分表是指建立多個表結構相同的表,然後根據業務邏輯的需要把資料分別放到不同的表中去,水平
分割會給應用增加複雜度,它通常在查詢時需要多個表名,查詢所有資料需要union操作。在許多
資料庫應用中,這種複雜性會超過它帶來的優點,但當某個表的資料量特別大的時候(比如百萬級別資料),那就得考慮分割槽或者水平分表了
垂直分表是指 某個表的字段太多了,而且特別多大的字段,這是候就可以考慮把對此表進行垂直分表,比如:user表中含有大量字段,
而且該開發中需要多次操作此表,那我們就可以把該錶拆分為user表和userinfo表
1.邏輯水平分表:
好處:可以在不修改**的前提上就能實現分表改善讀寫效率。
前提 : 該錶的表引擎得是merge
缺點:效率沒有真正的分表的效率高
mysql> create table if not exists `user1` (
-> `id` int(11) not null auto_increment,
-> `name` varchar(50) default null,
-> `***` int(1) not null default '0',
-> primary key (`id`)
-> ) engine=myisam default charset=utf8 auto_increment=1 ;
query ok, 0 rows affected (0.05 sec)
mysql> create table if not exists `user2` (
-> `id` int(11) not null auto_increment,
-> `name` varchar(50) default null,
-> `***` int(1) not null default '0',
-> primary key (`id`)
-> ) engine=myisam default charset=utf8 auto_increment=1 ;
query ok, 0 rows affected (0.01 sec)
mysql> insert into `user1` (`name`, `***`) values('張映', 0);
query ok, 1 row affected (0.00 sec)
mysql> insert into `user2` (`name`, `***`) values('tank', 1);
query ok, 1 row affected (0.00 sec)
mysql> create table if not exists `alluser` (
-> `id` int(11) not null auto_increment,
-> `name` varchar(50) default null,
-> `***` int(1) not null default '0',
-> index(id)
-> ) type=merge union=(user1,user2) insert_method=last auto_increment=1 ;
query ok, 0 rows affected, 1 warning (0.00 sec)
按照以上的**邏輯去建表,然後讀寫都操作alluser表即可,簡單方便。
2.直接水平分表
好處:效率比上面的邏輯分表的效率要高
缺點 : 複製,讀寫都要去操作不同的表
把出現大資料量且訪問頻繁的表,將其分為若干個表,如:把message 表分為message_00,message_01,message_02,
直到message_99等,在寫入資料的時候要根據業務需求或者一定的規律去寫入到不同的表中去,在需要進行讀操作時,
使用union 和 union all 操作把查詢出來的資料拼接一起
談談 分庫 分表 怎麼用
重中之重,什麼是分庫分表?什麼情況下用到分庫分表?其次為分庫分表的方式?怎麼用?二 資料分庫 三 注意點 什麼是?顧名思義,將乙個庫的資料分散到多個庫中,把乙個表的資料分到多個表中儲存。什麼情況下用到?當乙個庫被建立後,隨著時間和業務量的增加,或者業務流量本來就很多的情況下,資料庫中的資料會越來越多...
mysql分表準則 Mysql分表準則
mysql分表準則 在大量使用mysql時,資料量大 高訪問時,為了提高效能需要分表處理,簡介下mysql分表的標準,後續會繼續補充 環境 業務型別 oltp 硬體 cpu 8cpu 2.4ghz mem 48g 磁碟 raid5 6 sas 什麼樣的表需要拆分 根據表的體積 表的行數 訪問特點來衡...
簡單談談MySQL資料透視表
我有一張這樣的產品零件表 部分part id part type product id 1 a 1 2 b 1 3 a 2 4 程式設計客棧 b 2 5 a 3 6 b 3 我想要乙個返回如下 的查詢 product id part a id part b id 1 1 2 2 3 4 3 5 6 ...