本文总结个这段时间研究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.
分享到:
相关推荐
MySQL水平分区表实际操作总结 Mysql水平分表 mysql水平分表和垂直分表和数据库分区 sysbench mysql 坚持不懈 sysbench安装和使用 SHOW INNODB STATUS 探秘 体验Innodb with Memcached –安装 数据切分及整合方案 ...
MySQL分区表是一种数据库管理策略,它将一个大表的数据分散到多个物理存储单元,从而提高数据管理和查询性能。本文将深入探讨分区表的概念、优点、限制以及常见的分区类型。 首先,分区表的基本概念是根据特定的...
8. **分表与分区结合**:当单个表过大时,可以先进行垂直分表(减少列数),再进行水平分区(分区分表),以实现更细粒度的优化。 9. **分区裁剪**:优化器会自动剔除不相关的分区,但某些复杂查询可能无法充分利用...
总结,处理千万级别的数据表,需要综合运用数据库设计、索引优化、分区策略、SQL优化等方法,以确保系统的高效稳定运行。"t_order.sql"文件提供了一个实践场景,通过学习和应用上述知识,可以提升您的数据库管理能力...
MySQL从5.7版本开始对分区表进行了大量改进,包括对分区的查询、插入、更新等操作的支持。 分区类型主要包括LIST分区、RANGE分区、COLUMNS分区、HASH分区和KEY分区。LIST分区基于枚举值列表进行分区,而RANGE分区...
下面通过具体的示例来了解如何在MySQL中创建分区表: 假设我们有一个名为`tbl_user_innodb`的InnoDB引擎表,其中包含大量记录,为了优化查询性能,我们可以考虑对其使用Range分区。 ```sql CREATE TABLE `tbl_user...
MySQL交换分区是数据库管理系统中的一种高级操作,它允许用户在不使用复杂的SQL语句或备份恢复的情况下,将分区表中的一个分区与一个普通表的数据进行互换。这在处理大量数据时非常有用,例如在数据迁移、数据清理或...
- **分区表支持**:支持对表进行水平分割,便于管理大规模数据集。 - **JSON数据类型支持**:引入了JSON数据类型,允许在数据库中直接存储和操作JSON格式的数据。 - **性能监视器**:提供了性能监视器...
MySQL是一种广泛使用的开源关系型数据库管理系统,以其高效、稳定和易于使用的特点,深受开发者和企业的青睐。本测试数据集提供了一张包含200万条...通过实际操作和测试,我们可以更好地掌握MySQL数据库的相关知识。
MySQL中的分表和分区是两种不同的数据库优化策略,它们旨在管理和优化大数据量的表,以提升查询性能和系统效率。 **分表**是指将一张大表拆分成多个小表,每个小表都拥有完整的表结构,包括.MYD数据文件、.MYI索引...
- **水平分表:** 根据特定条件(如用户ID、时间范围等)进行数据分区,将大表拆分为小表,减轻单表压力。 - **引入OLAP系统:** 对于分析类查询,可以考虑使用如Hive、Impala或ClickHouse等专门的分析型数据库。 ...
MySQL是一种广泛使用的开源关系型...以上是对MySQL数据库表的一些基础知识点的概述,实际应用中还有更多高级特性和策略,如复制、主从同步、分区策略、存储引擎选择等,都需要根据具体应用场景进行深入学习和实践。
为了适应不同层次读者的需求,本书还包含了一些进阶知识,比如如何通过第三方工具来管理MySQL,以及一些高级特性,例如分区表和复制技术的使用。这些内容有助于读者进一步扩展MySQL的应用范围,并解决更复杂的业务...
10. 高可用与扩展性:了解MySQL复制、主从配置,以及分区、分片等高可用和水平扩展策略,为大型应用提供支持。 在这个"blog"项目中,学生可能需要设计一个博客系统相关的数据库,包括用户表、文章表、评论表等,并...
- **分区表**:介绍分区表的基本概念、优势及如何在MySQL中实现分区表。 - **集群与复制**:学习MySQL集群和主从复制的工作原理及其配置方法。 通过以上知识点的学习,可以全面地掌握MySQL数据库的相关技术,无论是...
分区表仍有一个`.FRM`文件,而数据和索引文件会被按照分区规则分散在多个`.MYD`和`.MYI`文件中,还会有一个`.PAR`文件记录分区信息。比如,表`aa`被分区为`p1`和`p3`,数据处理依然在单一的表名下完成,但数据物理上...
7. **分区表管理**:改进了分区表的管理和维护机制,使数据库管理员能够更加灵活地管理大规模数据集。 #### MySQL Cluster NDB 7.5 MySQL Cluster NDB 7.5是MySQL 5.7版本中集成的分布式数据库解决方案的一部分。它...
- **分区表**:通过创建分区表来提高查询效率,特别是对于具有明显时间特征的数据集。 - **分布式数据库解决方案**:当单个实例无法承载所有负载时,可以考虑采用分布式数据库如TiDB、Cassandra等。 #### 四、案例...