MySQL 分区
mysql,mysql分区,mysql存储引擎
MySQL分区
在mysql中如果数据量太大了,除了分表还可以分区。对于单个表进行分区。分区分为横向分区和纵向分区。
- 横向分区: 切分行,将某一些行分到某一个分区中。
- 纵向分区: 切分列,将某一些列分到某一个分区。
目前我实践过的是横向分区。
可以通过下面命令来判断当前的mysql版本支不支持分区
mysql> show variables like "%part%";
如果支持的话,变量的值是 YES
分区的方式有好几种,分别是:
- Range分区
按照Range分区的话会将数据划分成一个给定的连续区间的行。
-- 创建Range分区 CREATE TABLE RES_X ( partionKey int(2) not null, val int(10) ) engine=MyISAM default CHARTSET=utf8 partition by RANGE(partionKey) ( partition p0 values less than (1), partition p1 values less then (2), partition p1 values less then (3), partition p1 values less then (4), partition p1 values less then (5) ) ;
-- 查看表是否使用了分区
show table status;
-- 查看表具有几个分区,分区的方式,每个分区中的记录数
select * from information_schema.PARTITIONS WHERE TABLE_SCHEMA=schema() and table_name='RES_X'
-- 查看某查询语句从那个分区中查的数据,可以通过 EXPLAIN 命令
EXPLAIN PARTITIONS ( SELECT * FROM RES_X WHERE partionKey = xx)
list分区
- 创建 List 分区 CREATE TABLE RES_X ( partionKey int(2) not null, val int(10) ) engine=MyISAM default CHARTSET=utf8 partition by LIST(partionKey) ( partition p0 values in (1,2,3,4), partition p1 values in (5,6,7), partition p1 values in (8,9), partition p1 values in (10,11,12,13), partition p1 values in (14,15) ) ;
hash分区
-- 创建Hash分区
CREATE TABLE RES_X (
partionKey int(2) not null,
val int(10)
) engine=MyISAM default CHARTSET=utf8
partition by HASH(partionKey)
partitions 4 ;
- key分区
-- 创建KEY分区
CREATE TABLE RES_X (
partionKey int(2) not null,
val int(10)
) engine=MyISAM default CHARTSET=utf8
partition by KEY(partionKey)
partitions 4 ;
在实践中使用的是第一种Range分区方式。后面三种分区方式应该也是大同小异,差不了太多。
在上面创建分区的时候,都指定了表的引擎使用 MyISAM , 那么mysql有哪些引擎,以及各种存储引擎的区别又是什么?
MySQL存储引擎
在mysql客户端,通过命令:
mysql> show engines;
就可以看到Mysql支持的存储引擎
MyISAM 使用场景
MyISAM表无法处理事务,所以,如果有事务要求的表不能使用MyISAM引擎。
- MyISAM存储引擎在筛选大量数据是非常迅速。
InnoDB
InnoDB是一个健壮的事务型存储引擎。
- 要求支持事务的表
- 支持自增属性 auto_increment
- 更新密集的表。
- 外键约束
目前在应用中也就用了这两种类型的存储引擎。还有几种存储引擎
如: MEMORY , MERGE, ARCHIVE。
通常基本上都用 InnoDB 存储引擎。默认也是这个。 当然,如果遇到数据量很大,基本上只用于查询作用,比如作为某种类型的资源库。 那么可以改用 MyISAM 存储引擎。
*转载请注明出处! 原文地址: [htt