mysql分区
1、分区的概念:
myisam引擎的一张表主要对应着三个文件,一个是frm存放表结构的,一个是myd存放表数据的,一个是myi存表索引的
使用innoDB引擎的/mysql/data/数据库名目录下一张表有一个frm文件存放数据结构,其他的数据部分全部都存在在/mysql/data目录下的ibdata文件中。
分区就是要把这些大文件分成n个小文件存放,这样就不会因为数据越来越多,文件变大。
2、查看版本是否支持分区
show variables like '%partition%'
3、分区类型
range分区 :基于属于一个给定连续区间的列值,把多行分配给分区
list分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。
hash分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。
key分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL 服务器提供其自身的哈希函数。必须有一列或多列包含整数值
无论使用何种类型的分区,分区总是在创建时就自动的顺序编号,且从0开始记录,记住这一点非常重要。当有一新行插入到一个分区表中时,就是使用这些分区编号来识别正确的分区。例如,如果你的表使用4个分区,那么这些分区就编号为0, 1, 2, 和3。对于RANGE和LIST分区类型,确认每个分区编号都定义了一个分区,很有必要。对HASH分区,使用的用户函数必须返回一个大于0的整数值。对于KEY分区,这个问题通过MySQL服务器内部使用的 哈希函数自动进行处理。
4、不用分区的实例:
list分区
create table test (id int)
partition by list(id) (
partition p0 values in (1,3,5),
partition p1 values in (2,4,6)
);
range分区
craetea table test (id int)
partition by range (id) (
partition p0 values less than (6),
partiotion p1 values less than (11).
partition p2 values less than (20).
partition p3 values less than maxvalue
);
hash分区
create table test (id int)
partiotion by hash(id)
partitions 4;