一、分区

1、分区概念
将某张表数据,分别存储到不同的区域中。
每个分区,都是独立的表,都要存储该分区的数据,索引信息。

2、创建分区
创建表并指定分区的选项
create table 表名 (
    定义...
)
Partition by 分区算法 (分区参数) 分区选项
(*分区所参与的字段必须为主键的一部分)

3、分区算法
(1)、key  按照某个字段进行取余
create table test1 (
    id int unsigned not null auto_increment,
    title varchar(32) no null default '',
    primary key (id)
)engine=myisam charset=utf8
partition by key (id) partitions 5;

(2)、hash 按照某个表达式的值进行取余
--按照月份分成12个分区
create table test2 (
    id int unsigned not null auto_increment,
    birthday date,
    primary key (id,birthday)
)engine=myisam charset=utf8
partition by hash (month(birthday)) partitions 12;
(*key,hash分区算法要求分区参数必须返回为整数)

(3)、list 需要指定每个分区的存储条件
--按照四个季节分成4个分区
create table test3 (
    id int unsigned not null auto_increment,
    birthday date,
    primary key (id,birthday)
)engine=myisam charset=utf8
partition by list (month(birthday)) (
    partition p1 values in(3,4,5),
    partition p2 values in(6,7,8),
    partition p3 values in(9,10,11),
    partition p4 values in(12,1,2)
);
(*list条件依赖的数据是列表形式)

(4)、range 条件依赖的数据是一个条件表达式
--按年份分成70后,80后,90后,00后4个分区
create table test4 (
    id int unsigned not null auto_increment,
    birthday date,
    primary key (id,birthday)
)engine=myisam charset=utf8
partition by range (year(birthday)) (
    partition p70 values less than (1980),
    partition p80 values less than (1990),
    partition p90 values less than (2000),
    partition p00 values less than MAXVALUE,
);

4、查看mysql是否支持分区
> show variables like 'have_partitioning';
(*mysql5.6后移除了have_partitioning项,可以用SHOW PLUGINS;来查看)

5、管理分区语法
(1)、key,hash
增加分区数量
> alter table test2 add partition partitions N;
减少分区数量
> alter table test2 coalesce partition N;
(*采用取余算法的分区数量的修改,不会导致已有分区数据的丢失)

(2)、list,range
增加分区
> alter table test4 add partition (
    partition p2010 values less than (2010)
);

删除分区
> alter table test4 drop partition 分区名;
(*删除条件算法的分区,导致分区数据的丢失)

6、选择分区算法
平均分配,就按照主键进行key即可
按照某种业务逻辑分区:
1、选择那种整数型
2、最容易被筛选的字段

二、mysql服务器配置常用优化项

支持的最大连接数
max_connections = 100
myisam配置
键缓冲的大小,建议不要超过物理内存的30%
key_buffer_size=55M
表缓存,缓存的是表文件的句柄
table_cache=256
innodb配置
innodb缓冲池的大小,最大可以为机器物理内存的80%
innodb_buffer_pool_size=107M