一、表分区:
当一张表的数据非常多的时候,比如单个.myd文件都达到10G, 这时,必然读取起来效率降低,可不可以把表的数据分开在几张表上?
1.从业务角度可以解决(分表):
比如, 通过id%10 , user0 , user1....user9, 这10张表,根据不同的余数,来插入或查询某张表;
2.通过mysql的分区功能:
mysql将会根据指定的规则,把数据放在不同的表文件上,相当于在文件上被拆成了小块,但是给客户的界面还是1张表
二、分区规则:
1.根据某列的范围来分区:
create table topic (
tid int primary key auto_increment,
title char(20) not null default ''
) engine myisam charset utf8
partition by range(tid) (
partition t1 values less than (10),
partition t2 values less than (20),
partition t3 values less than MAXVALUE
);
查看topic表文件组成:cd/var/lib/mysql/test
注:普通表一般由三个文件组成:.frm文件存放表结构,.MYD文件存放表数据,.MYI文件存放表索引,分区表则在每个分区都有.MYD和.MYI文件单独存放着表数据和表索引
2.根据某列的散点值来分区:
create table area (
aid int,
zone char(6)
) engine myisam charset utf8;
create table member(
uid int,
uname char(6),
aid int
) engine myisam charset utf8
partition by list(aid) (
partitionbj values in (1),
partitionhb values in (2),
partitionsx values in (3),
partitionah values in (4)
);
insert into member (uname,aid) values('poly',1); //此时poly属于bj分区
insert into member (uname,aid) values('lily',2); //此时lily属于hb分区