partition分区

MySQL表分区优化
应用情境:
当一张表的数据非常多的时候,比如单个.myd文件都达到10G, 这时,必然读取起来效率降低.
可不可以把表的数据分开在几张表上?


1: 从业务角度可以解决. (分表)
比如, 通过id%10 , user0 , user1....user9, 这10张表
根据不同的余数,来插入或查询某张表.


2: 通过mysql的分区功能
mysql将会根据指定的规则,把数据放在不同的表文件上.
相当于在文件上,被拆成了小块.

但是,给客户的界面,还是1张表.


按range分区:

create table topic (
     tid int primary key auto_increment,
     title char(20) not null default ''
)engine myisam charset utf8
     partition by range(tid) (
     partition t0 values less than(10),
     partition t1 values less than(20),
     partition t2 values less than(MAXVALUE)
);


测试新增的数据分别放到哪个分区下:

<span style="font-size:18px;">insert into topic values (1,'aa');
insert into topic values (11,'bb');</span>

查看mysql数据库存放目录下的数据表结构文件的大小:

当执行上面第一条sql语句时:


说明:

MYD后缀的表示存放mysql的数据

MYI后缀的表示存放mysql的索引

frm后缀的表示存放mysql的表结构

执行第一条语句后,数据就存放到分区0中


当执行第二条sql语句时:


数据存放到分区1中


按散点值分区:

<span style="font-size:18px;">CREATE TABLE area (aid INT, zone CHAR(10)) ENGINE myisam charset utf8;

INSERT INTO area
VALUES
	(1, 'bj'),
	(2, 'hb'),
	(3, 'sx'),
	(4, 'ah');

CREATE TABLE user (
    uid INT NOT NULL,
    uname VARCHAR(30),
    aid INT NOT NULL
)
PARTITION BY LIST(aid) (
    PARTITION bj VALUES IN (1),
    PARTITION hb VALUES IN (2),
    PARTITION sx VALUES IN (3),
    PARTITION ah VALUES IN (4)
);</span>


<pre name="code" class="sql">在分区1和2插入数据:
insert into user (uname,aid) vaules ('poly',1);insert into user (uname,aid) vaules ('lily',2);


测试方法跟上面的按范围分区一样
注意:如果aid的值不在1-4之间,会报错,即mysql不知道该将记录分到哪个区


分区的好处:

1.表是由mysql按逻辑来进行分区的,在物理层面上只能看到一张表,不需要人为的设置路由规则去访问分区表(降低了维护成本)

2.分层了多个分区,可以增加访问连接数,I/O数,可以在一定程度上降低了死锁的概率



注意: 在使用分区的时候,注意,分区的那个列,值不要为NULL 
(如果不小心为NULL,mysql为理解为0,尽量执行之)

注 :分区甚至可以按照表达式的返回值,计算所属区. 
但用表达式,不如直接用值来得快. 根据情况而定.


比如,用 partition by range (year(regtime)) 可以按注册年份来分区.


分区的好处:

1.表是由mysql按逻辑来进行分区的,在物理层面上只能看到一张表,不需要人为的设置路由规则去访问分区表(降低了维护成本)

2.分层了多个分区,可以增加访问连接数,I/O数,可以在一定程度上降低了表锁的概率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值