Mysql表分区

2016-08-12  本文已影响44人  杍劼

一、表分区:

当一张表的数据非常多的时候,比如单个.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分区

上一篇 下一篇

猜你喜欢

热点阅读