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引擎。

  1. MyISAM存储引擎在筛选大量数据是非常迅速。

InnoDB

InnoDB是一个健壮的事务型存储引擎。

  1. 要求支持事务的表
  2. 支持自增属性 auto_increment
  3. 更新密集的表。
  4. 外键约束

目前在应用中也就用了这两种类型的存储引擎。还有几种存储引擎
如: MEMORY , MERGE, ARCHIVE。

通常基本上都用 InnoDB 存储引擎。默认也是这个。 当然,如果遇到数据量很大,基本上只用于查询作用,比如作为某种类型的资源库。 那么可以改用 MyISAM 存储引擎。

<<< 捐赠 >>>

*转载请注明出处! 原文地址: [htt

留言

2016-01-28