十三、mysql 分區之 RANGE && LIST,mysqlrange
1.RANGE 分區
創建實例:
CREATE TABLE EMP (
id int not null primary key auto_increment,
name char(25) not null default ''
)
PARTITION BY RANGE (id) ( 將字段id定義為分區的字段
PARTITION P0 VALUES LESS THAN (100), 99以下的id都歸到p0分區
PARTITION P1 VALUES LESS THAN (200), 100-199
PARTITION P2 VALUES LESS THAN (300) 200-299
);
PS::因為默認會將0也算進去,所以P0實際可以存儲0-99或-數
PS::要麼不包含主鍵,如果要包含主鍵,那麼分區字段也必須是主鍵
PS::mysql5.5以上支持日期進行分區,有什麼作用,^_^,你可以想到的
2.List分區
創建實例:
CREATE TABLE LIST_EMP (
tid int not null PRIMARY key auto_increment,
tname char(20)
)
PARTITION BY LIST (tid) (
PARTITION P0 VALUES IN (1,3,5,7,9),
PARTITION P1 VALUES IN (2,4,6,8,10)
);
PS::通過上面的2種分區不難看出,RANGE分區是指定一個范圍,而List分區是指定一個列表,在list中,只有指定的值才能存進去!
PS::個人覺得List分區更多可以用在分類上面
測試:
insert into list_emp values (null,'Php');
insert into list_emp values (null,'Php');
insert into list_emp values (null,'Php');
insert into list_emp values (null,'Php');
insert into list_emp values (null,'Php');
insert into list_emp values (null,'Php');
insert into list_emp values (null,'Php');
insert into list_emp values (null,'Php');
insert into list_emp values (null,'Php');
insert into list_emp values (null,'Php');
insert into list_emp values (null,'Php');ERROR 1526 (HY000): Table has no partition for value 11
PS::第11條數據的時候報錯,因為沒有任何分區表包含了它
mysql裡的range分區方式與主鍵沖突了怎辦?innodb中沒有主鍵會造成什影響?
innodb


沒有索引

默認會有


隱藏

聚集索引Rowid

主要取決於


商業邏輯

人觀點:鏟除掉


主鍵

會對索innodb造成影響



用了隱藏索引



考慮適當增大分區

盡量保持順序寫入

還會適當提高效率
mysql 怎給已有表分區
我也

找方法 mysql自從5.1開始



表分區了