MySQL 橫向表分割槽之RANGE分割槽小結

2022-06-29 08:45:09 字數 3167 閱讀 5256

mysql 橫向表分割槽之

range

分割槽小結

by:授客qq:

1033553122

目錄

簡介1range分割槽1

建立分割槽表

1檢視表分割槽

2新增表分割槽

2新增資料

3分割槽表查詢

3刪除資料

4刪除分割槽

4mysql表分割槽

--range

分割槽,屬於橫向分割槽。舉例說,假如有

100條資料,分成十份,前

10條資料放到第乙個分割槽,第二個

10條資料放到第二個分割槽,依此類推。橫向分割槽,並不會改變表的結構。

基於屬於乙個給定

連續區間

的列值,把多行分配給分割槽。

例子:按user_id分割槽,建立分割槽表

create table `auth_user_group` (

`id` int(11) not null auto_increment,

`user_id` int(11) not null,

`group_id` int(11) not null,

primary key (id,user_id)

)partition by range(user_id) (

partition p1 values less than (6),

partition p2 values less than (11),

partition pmax values less than maxvalue

);注意:

1、分割槽字段必須是主鍵、聯合主鍵的一部分,否則會報如下錯誤:

a primary key must include all columns in the table's partitioning function

2、分割槽字段值的設定必須是連續的,否則會報錯

註解:partition 分割槽名

values than (

字段值)

如上表定義,意為,user_id值小於

6的記錄,存放在

p1表分割槽,值大於等於

6,小於

11的記錄,存放在

p2表分割槽,小於最大值,大於等於

11的記錄,都存放在

pmax

分割槽。show create table table_name;

例子:show create table

auth_user_group

;結果如下:

create table `auth_user_group` (

`id` int(11) not null auto_increment,

`user_id` int(11) not null,

`group_id` int(11) not null,

primary key (`id`,`user_id`)

) engine=innodb default charset=utf8

注意:如果建立分割槽表時,使用了maxvalue,形如:

partition p

maxvalues less

maxvalue,那麼新增分割槽時會報錯,類似如下:

maxvalue can only be used in last partition definition

原因:因為新增分割槽時,是在原有分割槽列表末尾繼續新增,而than maxvalue正好位於末尾,同時其也包含了要新增的分割槽範圍,所提系統會任務衝突,解決方法,定義分割槽表時,不設定

maxvalue

,如下:

create table `auth_user_group2` (

`id` int(11) not null auto_increment,

`user_id` int(11) not null,

`group_id` int(11) not null,

primary key (id, user_id)

)partition by range(user_id) (

partition p1 values less than (6),

partition p2 values less than (11)

);alter table auth_user_group2 add partition

(partition p3 values less than (21),

partition p4 values less than (31)

)和普通插入一樣,但是要注意的是,分割槽字段值不能超過給定分割槽的最大值(例中為

30),

例:insert into auth_user_group2(user_id, group_id) values(

39, 30);

報錯:table has no partition for value 39

修改改成這樣就可以:

insert into auth_user_group2(user_id, group_id) values(10, 30);

增對分割槽表,我們在查詢時可以指定分割槽,加快查詢速度。

如果涉及多個分割槽,則用逗號隔開。

select * from auth_user_group2 partition(p2, p3)

增對分割槽表,我們在刪除時可以指定分割槽,避免檢索帶來的時間消耗。

delete from auth_user_group2 partition (p2) where id = 1

和查詢一樣,如果涉及到多個分割槽,則逗號分隔

delete from auth_user_group2 partition (p2

, p3

) where id = 1

alter table

auth_user_group2

drop partition p3

注意:刪除分割槽也會刪除記錄

mysql 橫向分表

分表其實有很多種的方法可行 就像是集群我們也可以叫做是分表 今天給大家演示乙個最簡單的橫向分表 1,建立乙個完整表儲存著所有的成員資訊 create table member id bigint auto increment primary key,name varchar 20 tinyint n...

mysql表分割槽全文搜尋 Mysql表分割槽

什麼時候使用分割槽 海量資料 資料表索引大於伺服器有效記憶體 分割槽的限制 大部分只能對資料表的整型列進行分割槽,或者資料列可以通過分割槽函式轉化成整型列 其中columns支援 integer string date datetime型別 最大分割槽數目不能超過1024 如果含有唯一索引或者主鍵,...

mysql表分割槽

表分割槽的優點 查詢優化 缺點 除了資料庫管理方面複雜了點,其它的還沒有發現 只有5.1及之後的版本才支付分割槽,同時5.1中分割槽的一些維護的工具還不完善 mysql目前四種分割槽 1range 根據某個列的某種運算進行分割槽,分割槽的標誌都是該列的某種運算後的連續區間 create table ...