`
shuailan
  • 浏览: 4047 次
  • 性别: Icon_minigender_1
  • 来自: 大连
最近访客 更多访客>>
社区版块
存档分类
最新评论

MySQL水平分区表实际操作总结

阅读更多

 

本文总结个这段时间研究MySQL水平分区表总结,列举分区表的相关操作.

在网上看了很多文章,都太过于概念,注意集中在介绍分区表的优点,而不注重时间操作,跟大学教授论文似的,唯一由于的一片文章和大家分享一下吧http://fanqiang.chinaunix.net/db/mysql/2006-05-08/4135.shtml

 

MySQL分区表操作代码 (本案例按月分区):

       1. 创建分区表

CREATE TABLE `表名` (
  	`EQUIPMENTID` char(17) NOT NULL,
  	`ATTRIBUTEID` char(4) NOT NULL,
  	`VALUE` varchar(20) NOT NULL,
  	`COLLECTTIME` datetime NOT NULL
) 
ENGINE=InnoDB (适用大部分引擎,可根据需要调整)
DEFAULT CHARSET=latin1(编码可根据需要修改) 
PARTITION BY RANGE (to_days(COLLECTTIME)) 
(PARTITION pmin VALUES LESS THAN (to_days('2010-01-01')),
PARTITION p201001 VALUES LESS THAN (to_days('2010-02-01')) , 
PARTITION p201002 VALUES LESS THAN (to_days('2010-03-01')) ,
PARTITION p201003 VALUES LESS THAN (to_days('2010-04-01')) , 
PARTITION p201004 VALUES LESS THAN (to_days('2010-05-01')) ,
PARTITION p201005 VALUES LESS THAN (to_days('2010-06-01')) , 
PARTITION p201006 VALUES LESS THAN (to_days('2010-07-01')) ,
PARTITION p201007 VALUES LESS THAN (to_days('2010-08-01')) , 
PARTITION p201008 VALUES LESS THAN (to_days('2010-09-01')) ,
PARTITION p201009 VALUES LESS THAN (to_days('2010-10-01')) , 
PARTITION p201010 VALUES LESS THAN (to_days('2010-11-01')),
PARTITION p201011 VALUES LESS THAN (to_days('2010-12-01')),
PARTITION p201012 VALUES LESS THAN (to_days('2011-01-01')),
PARTITION p201101 VALUES LESS THAN (to_days('2011-02-01')),
PARTITION p201102 VALUES LESS THAN (to_days('2011-03-01')),
PARTITION p201103 VALUES LESS THAN (to_days('2011-04-01')),
PARTITION p201104 VALUES LESS THAN (to_days('2011-05-01')),
PARTITION p201105 VALUES LESS THAN (to_days('2011-06-01')),
PARTITION p201106 VALUES LESS THAN (to_days('2011-07-01')),
PARTITION p201107 VALUES LESS THAN (to_days('2011-08-01')),
PARTITION p201108 VALUES LESS THAN (to_days('2011-09-01')),
PARTITION p201109 VALUES LESS THAN (to_days('2011-10-01')),
PARTITION p201110 VALUES LESS THAN (to_days('2011-11-01')),
PARTITION p201111 VALUES LESS THAN (to_days('2011-12-01')),
PARTITION p201112 VALUES LESS THAN (to_days('2012-01-01')),
PARTITION pmax VALUES LESS THAN MAXVALUE );
  

        2. 为现有表创建分区

alter table 表名
PARTITION BY RANGE (to_days(COLLECTTIME)) 
(PARTITION pmin VALUES LESS THAN (to_days('2010-01-01')),
PARTITION p201001 VALUES LESS THAN (to_days('2010-02-01')) , 
PARTITION p201002 VALUES LESS THAN (to_days('2010-03-01')) ,
PARTITION p201003 VALUES LESS THAN (to_days('2010-04-01')) , 
PARTITION p201004 VALUES LESS THAN (to_days('2010-05-01')) ,
PARTITION p201005 VALUES LESS THAN (to_days('2010-06-01')) , 
PARTITION p201006 VALUES LESS THAN (to_days('2010-07-01')) ,
PARTITION p201007 VALUES LESS THAN (to_days('2010-08-01')) , 
PARTITION p201008 VALUES LESS THAN (to_days('2010-09-01')) ,
PARTITION p201009 VALUES LESS THAN (to_days('2010-10-01')) , 
PARTITION p201010 VALUES LESS THAN (to_days('2010-11-01')),
PARTITION p201011 VALUES LESS THAN (to_days('2010-12-01')),
PARTITION p201012 VALUES LESS THAN (to_days('2011-01-01')),
PARTITION p201101 VALUES LESS THAN (to_days('2011-02-01')),
PARTITION p201102 VALUES LESS THAN (to_days('2011-03-01')),
PARTITION p201103 VALUES LESS THAN (to_days('2011-04-01')),
PARTITION p201104 VALUES LESS THAN (to_days('2011-05-01')),
PARTITION p201105 VALUES LESS THAN (to_days('2011-06-01')),
PARTITION p201106 VALUES LESS THAN (to_days('2011-07-01')),
PARTITION p201107 VALUES LESS THAN (to_days('2011-08-01')),
PARTITION p201108 VALUES LESS THAN (to_days('2011-09-01')),
PARTITION p201109 VALUES LESS THAN (to_days('2011-10-01')),
PARTITION p201110 VALUES LESS THAN (to_days('2011-11-01')),
PARTITION p201111 VALUES LESS THAN (to_days('2011-12-01')),
PARTITION p201112 VALUES LESS THAN (to_days('2012-01-01')),
PARTITION pmax VALUES LESS THAN MAXVALUE );

如果表中已有数据,分区时会自动进行分区存储,不必担心数据丢失或者手动分类数据.  

 

3. 删除表中的指定分区

ALTER TABLE 表名 DROP PARTITION 分区名;

   删除分区会导致分区数据丢失,建议先备份.

4. 追加表分区

ALTER TABLE 表名 DROP PARTITION pmax;
ALTER TABLE 表名
ADD PARTITION (
PARTITION p201201 VALUES LESS THAN (to_days('2012-2-1')),
PARTITION pmax VALUES LESS THAN MAXVALUE);

需要先删除MAXVALUE分区后增加分区后再重建MAXVALUE分区,删除前需要先备份MAXVALUE分区数据.

 5. 查看标分区信息

SELECT 
  		partition_name part,  
  		partition_expression expr,  
  		partition_description descr,  
  		table_rows  
FROM 
  		INFORMATION_SCHEMA.partitions  
WHERE 
  		TABLE_SCHEMA = schema() 
  		AND TABLE_NAME='表名';
  

6. 查看查询语句涉及分区信息

explain partitions
select … from 表名 where …;

该操作只查看查询语句相关的分区信息,不会返回查询结果.

 

        以上是我对MySQL的初体验总结,没啥心得体会,只有一点点成就感,希望和大家分享.

另外分区表尚存在问题:

1,是否可将分区表设置在不同硬盘,innodb可行?

2,是否可根据多条件进行水平分区,类似group by 列1,列2...

3,是否能将分区设置成不同引擎,例如当前使用中的分区为innodb,老的分区使用MyISAM.

 

分享到:
评论
1 楼 yanyuxiyangzk 2012-11-26  
          ggggggg

相关推荐

    MYSQL学习资料

    MySQL水平分区表实际操作总结 Mysql水平分表 mysql水平分表和垂直分表和数据库分区 sysbench mysql 坚持不懈 sysbench安装和使用 SHOW INNODB STATUS 探秘 体验Innodb with Memcached –安装 数据切分及整合方案 ...

    通过实例学习MySQL分区表原理及常用操作

    MySQL分区表是一种数据库管理策略,它将一个大表的数据分散到多个物理存储单元,从而提高数据管理和查询性能。本文将深入探讨分区表的概念、优点、限制以及常见的分区类型。 首先,分区表的基本概念是根据特定的...

    MySQL分区分表方案实践手册

    8. **分表与分区结合**:当单个表过大时,可以先进行垂直分表(减少列数),再进行水平分区(分区分表),以实现更细粒度的优化。 9. **分区裁剪**:优化器会自动剔除不相关的分区,但某些复杂查询可能无法充分利用...

    mysql 千万数据表 t_order.zip

    总结,处理千万级别的数据表,需要综合运用数据库设计、索引优化、分区策略、SQL优化等方法,以确保系统的高效稳定运行。"t_order.sql"文件提供了一个实践场景,通过学习和应用上述知识,可以提升您的数据库管理能力...

    总结MySQL的分区

    MySQL从5.7版本开始对分区表进行了大量改进,包括对分区的查询、插入、更新等操作的支持。 分区类型主要包括LIST分区、RANGE分区、COLUMNS分区、HASH分区和KEY分区。LIST分区基于枚举值列表进行分区,而RANGE分区...

    mysql分区资源整理

    下面通过具体的示例来了解如何在MySQL中创建分区表: 假设我们有一个名为`tbl_user_innodb`的InnoDB引擎表,其中包含大量记录,为了优化查询性能,我们可以考虑对其使用Range分区。 ```sql CREATE TABLE `tbl_user...

    MySQL交换分区的实例详解

    MySQL交换分区是数据库管理系统中的一种高级操作,它允许用户在不使用复杂的SQL语句或备份恢复的情况下,将分区表中的一个分区与一个普通表的数据进行互换。这在处理大量数据时非常有用,例如在数据迁移、数据清理或...

    MySQL5.6官方文档

    - **分区表支持**:支持对表进行水平分割,便于管理大规模数据集。 - **JSON数据类型支持**:引入了JSON数据类型,允许在数据库中直接存储和操作JSON格式的数据。 - **性能监视器**:提供了性能监视器...

    mysql 测试数据集,单表200万条数据

    MySQL是一种广泛使用的开源关系型数据库管理系统,以其高效、稳定和易于使用的特点,深受开发者和企业的青睐。本测试数据集提供了一张包含200万条...通过实际操作和测试,我们可以更好地掌握MySQL数据库的相关知识。

    mysql分表,分区的区别与联系借鉴.pdf

    MySQL中的分表和分区是两种不同的数据库优化策略,它们旨在管理和优化大数据量的表,以提升查询性能和系统效率。 **分表**是指将一张大表拆分成多个小表,每个小表都拥有完整的表结构,包括.MYD数据文件、.MYI索引...

    MySQL千万级大表深度分页为什么慢,以及优化的方法、原理

    - **水平分表:** 根据特定条件(如用户ID、时间范围等)进行数据分区,将大表拆分为小表,减轻单表压力。 - **引入OLAP系统:** 对于分析类查询,可以考虑使用如Hive、Impala或ClickHouse等专门的分析型数据库。 ...

    MySQL——数据库表.rar

    MySQL是一种广泛使用的开源关系型...以上是对MySQL数据库表的一些基础知识点的概述,实际应用中还有更多高级特性和策略,如复制、主从同步、分区策略、存储引擎选择等,都需要根据具体应用场景进行深入学习和实践。

    MySQL Cookbook 数据库精华学习

    为了适应不同层次读者的需求,本书还包含了一些进阶知识,比如如何通过第三方工具来管理MySQL,以及一些高级特性,例如分区表和复制技术的使用。这些内容有助于读者进一步扩展MySQL的应用范围,并解决更复杂的业务...

    MySQL课程设计MySQL课程设计blog

    10. 高可用与扩展性:了解MySQL复制、主从配置,以及分区、分片等高可用和水平扩展策略,为大型应用提供支持。 在这个"blog"项目中,学生可能需要设计一个博客系统相关的数据库,包括用户表、文章表、评论表等,并...

    mysql培训视频

    - **分区表**:介绍分区表的基本概念、优势及如何在MySQL中实现分区表。 - **集群与复制**:学习MySQL集群和主从复制的工作原理及其配置方法。 通过以上知识点的学习,可以全面地掌握MySQL数据库的相关技术,无论是...

    mysql分表,分区的区别与联系归类.pdf

    分区表仍有一个`.FRM`文件,而数据和索引文件会被按照分区规则分散在多个`.MYD`和`.MYI`文件中,还会有一个`.PAR`文件记录分区信息。比如,表`aa`被分区为`p1`和`p3`,数据处理依然在单一的表名下完成,但数据物理上...

    mysql5.7官方手册

    7. **分区表管理**:改进了分区表的管理和维护机制,使数据库管理员能够更加灵活地管理大规模数据集。 #### MySQL Cluster NDB 7.5 MySQL Cluster NDB 7.5是MySQL 5.7版本中集成的分布式数据库解决方案的一部分。它...

    mysql海量数据

    - **分区表**:通过创建分区表来提高查询效率,特别是对于具有明显时间特征的数据集。 - **分布式数据库解决方案**:当单个实例无法承载所有负载时,可以考虑采用分布式数据库如TiDB、Cassandra等。 #### 四、案例...

Global site tag (gtag.js) - Google Analytics