一、分区 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