1.创建分区
create table goods(
-> id int auto_increment,
-> name varchar(32) not null default ”,
-> price int not null default 0,
-> primary key (id)
-> )
-> engine=Myisam charset=utf8
-> partition by key(id) partitions 10;
信息会被平均分摊到各个数据表里面。
2.四种分表分区算法
求余:
key 根据指定的字段进行分区设计
partition by key(id) partitions 10;
hash 根据指定的表达式进行分区设计–必须是主键的部分
partition by hash(id) partitions 6;
条件:
range 字段/表达式 符合某个条件范围的分区设计
partition by range(字段/表达式)(
partition 分区名字 values less than (常量),
)
partition by range(year(pubdate))(
-> partition hou70 values less than(1980),
-> partition hou80 values less than(1990),
-> partition hou90 values less than(2000),
-> partition hou00 values less than(2010)
-> );
list 字段/表达式 符合某个列表范围的分区设计
partition by range(字段/表达式)(
partition 分区名字 values in (n1,n2,n3),
)
key:该方式区分不明显(不一定会严格平均给分区分配数据),但是大方向明显
hash/range/list:会根据业务特点把数据写入到对应的分区表里边。
3,管理分区
求余(key,hash)算法管理
增加分区: alter table goods add partition partitions 2;
减少分区: alter table 表名 coalesce partition 数量;
条件(range,list)算法管理
alter table 表名 add partition(
partition 分区名 values less than[in] (常量[列表]),
partition 分区名 values less than[in] (常量[列表]),
....
)
减少分区:
alter table 表名 drop partition 分区名称;
减少分区,会丢失对应分区的数据。
4.垂直分表
对记录进行分割并存储到许多不同的表,称为“水平分表”
对字段进行分割并存储到许多不同表,称为“垂直分表”
5.慢查询
查看慢查询是否开启: show variables like 'slow_query%';
开启慢查询日志:set global slow_query_log =1;
查看慢查询的时间阈值:show variables like 'long_query_time%';
设置时间阈值:set long_query_time=2;