`
yuanke
  • 浏览: 73582 次
  • 性别: Icon_minigender_2
  • 来自: 临沂
社区版块
存档分类
最新评论

MySQL对数据表已有表进行分区表

阅读更多

对现有的一个表进行创建分区表,并把数据迁移到新表,可以按时间来分区,然后这表不是实时更新,每天有一次插入操作。 
时间比较充裕,但是服务器上有其他应用,使用较小资源为主要方式。

操作方式

@1 可以使用ALTER TABLE来进行更改表为分区表,这个操作会创建一个分区表,然后自动进行数据copy然后删除原表, 
猜测服务器资源消耗比较大。

类似操作

ALTER TABLE tbl_rtdata PARTITION BY RANGE (Month(fld_date))
(   
PARTITION p_Apr VALUES LESS THAN (TO_DAYS('2012-05-01')),
PARTITION p_May VALUES LESS THAN (TO_DAYS('2012-06-01')), 
PARTITION p_Dec VALUES LESS THAN MAXVALUE );
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

@2 新建一个和原来表一样的分区表,然后把数据从原表导出,接着倒入新表。 
(原来的表主键只有id,而我的分区字段是 stsdate, 这里主键要修改为 id,stsdate 联合主键,分区表要求分区字段要是主键或者是主键的一部分)

操作过程

采用第二种方案。先创建分区表,然后导出原表数据,新表名称改为原表名,然后插入,最后建立普通索引。

建立分区表

CREATE TABLE `apdailysts_p` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `ap_id` INT(11) NOT NULL,
  `mac` VARCHAR(17) NOT NULL,
  `liveinfo` LONGTEXT NOT NULL,
  `livetime` INT(11) NOT NULL,
  `stsdate` DATE NOT NULL,
  `lastmodified` DATETIME NOT NULL,
   PRIMARY KEY (`id`, `stsdate`)
) 
PARTITION BY RANGE COLUMNS(stsdate) (
    PARTITION p0 VALUES LESS THAN ('2016-06-01'),
    PARTITION p1 VALUES LESS THAN ('2016-07-01'),
    PARTITION p2 VALUES LESS THAN ('2016-08-01'),
    PARTITION p3 VALUES LESS THAN ('2016-09-01'),
    PARTITION p4 VALUES LESS THAN ('2016-10-01'),
    PARTITION p5 VALUES LESS THAN ('2016-11-01'),
    PARTITION p6 VALUES LESS THAN ('2016-12-01'),
    PARTITION p7 VALUES LESS THAN ('2017-01-01'),
    PARTITION p8 VALUES LESS THAN ('2017-02-01'),
    PARTITION p9 VALUES LESS THAN ('2017-03-01'),
    PARTITION p10 VALUES LESS THAN ('2017-05-01'),
    PARTITION p11 VALUES LESS THAN ('2017-06-01'),
    PARTITION p12 VALUES LESS THAN ('2017-07-01'),
    PARTITION p13 VALUES LESS THAN ('2017-08-01'),
    PARTITION p14 VALUES LESS THAN ('2017-09-01'),
    PARTITION p15 VALUES LESS THAN MAXVALUE
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

导出数据

mysqldump -u dbname -p --no-create-info dbname apdailysts  > apdailysts.sql
  • 1
  • 1

修改表名,导入数据(10分钟就导入完了,200w, 8g多一点数据),测试下ok,删除原来的表。

测试可以正常使用,收工,观察2天。。

– 10.16 
通过这两天的观察,页面的查询速度从打不开到基本可以秒开的速度了,这个优化是成立的。

 
分享到:
评论

相关推荐

    MySql数据分区操作之新增分区操作

    在本篇文章中,我们将讨论如何在MySQL中对已存在的表进行分区操作,特别是新增分区。 首先,尝试直接通过`ALTER TABLE`语句添加分区到非分区表会导致错误,MySQL会返回`ERROR 1505 <HY000>: Partition management ...

    mysql历史数据同步到clickhouse 已测试

    在需要对历史数据进行深度分析时,将MySQL的数据同步到ClickHouse可以显著提升查询效率。 **1. 数据同步方案** - **binlog同步**: 利用MySQL的二进制日志(binlog)进行实时数据同步。例如,可以使用`Maxwell`或`...

    python脚本,根据excel数据自动创建mysql库、表-并更新数据

    python3.7.4版本,文件包含excel文件和py文件。 py文件中需要手动设置excel字段在mysql中的类型、index索引及写入时校验的字段...执行py文件,若不存在数据库及表会自动创建,并写入数据(对于指定字段重复的不会写入)

    数据库表分区工具1.2

    7. **批量操作**:对已有表进行分区调整或对多个表同时进行分区操作。 总之,"数据库表分区工具1.2"是数据库管理员和开发者的实用工具,它通过自动化和简化分区表的创建过程,提升了工作效率,同时也为大规模数据...

    Mysql 海量数据性能优化.rar

    5. **分区与分表**:对大表进行分区或分片可以分散I/O负载,提高查询效率。水平分区(分片)是将数据分布在多个物理服务器上,垂直分区是将表的列按功能划分为不同的表。 6. **缓存策略**:MySQL的查询缓存可以缓存...

    MySQL8.4.0 LTS(mysql-8.4.0.zip)

    4. **分区表优化**:8.4.0 可能包含对分区表的改进,提高了查询效率和维护速度,特别是在大型数据集上。 5. **原子DDL**:MySQL 8.x 提供了原子的数据库模式更改,这意味着数据定义语言(DDL)操作现在是事务安全的...

    MySQL分区字段列有必要再单独建索引吗?

    在MySQL数据库中,分区是一种优化查询性能的技术,它将大表的数据分成多个逻辑部分,每个部分对应表的一个或多个分区。通常,分区字段是主键的一部分,以确保数据分布均匀并提高查询效率。然而,问题在于,如果一个...

    Navicat for MySQL 带有数据模型

    4. **逆向工程**:Navicat可以从已存在的数据库中生成数据模型,这对于理解现有系统或进行数据库重构非常有用。只需连接到数据库,即可将表、视图和其他对象转换为模型。 5. **模型验证**:Navicat可以检查模型中的...

    MYSQL锁表问题的解决方法

    MySQL数据库在处理并发事务时,可能会出现锁表的问题,这通常发生在多个事务同时访问和修改同一数据时。当一个事务尚未完成,其他事务无法进行相关操作,就会导致锁表现象,影响数据库性能和应用的正常运行。本文将...

    10倍以上提高Pentaho Kettle的MySQL写入速度

    7. **数据分区**: 对于非常大的表,可以考虑使用分区策略,如范围分区、列表分区等,以提高数据插入和查询速度。 8. **避免回滚段**: 如果数据导入允许,可以关闭自动提交,减少回滚段的使用,以减少写入开销。 9....

    MySQL5.6官方文档

    - 升级MySQL:对于已有MySQL环境的用户,需按照官方指南进行平滑升级。 #### 五、MySQL5.6标准兼容性 - **MySQL扩展标准SQL**:MySQL支持标准SQL的同时,也包含了一些扩展功能,这些扩展特性增加了MySQL的灵活性...

    MySQL_5.1_zh.rar_MYSQL_MySQL_5.1_zh_mysql 中文

    2. **分区功能增强**:在 MySQL 5.1 中,用户可以对大表进行分区,以提高查询性能。分区可以基于哈希、范围、列表或线性哈希等多种方式。 3. **复制功能优化**:MySQL 5.1 提供了半同步复制,确保主库上的事务在被...

    mysql修复数据表的命令方法

    本文将详细讲解如何使用`mysqlcheck`命令来修复MySQL数据表。 `mysqlcheck`是MySQL提供的一款实用工具,它能够检查、修复、优化、分析数据库中的数据表。在修复数据表时,我们可以使用以下命令: 1. **修复所有...

    基于mysql的管理系统

    2. 性能优化:涉及SQL查询优化、内存配置优化、存储引擎选择、分区表策略等,目的是提高数据库的读写效率。 六、备份与恢复 1. 备份:mysqldump工具可以生成SQL脚本或二进制文件作为备份,定期备份是防止数据丢失的...

    同步mysql表结构.zip

    8. **性能优化**:同步过程中可能需要考虑性能问题,例如在高峰期避开大量写入操作,或者对大表进行分区以加速同步。 9. **数据一致性**:同步不只是结构,还应考虑数据的一致性。在某些场景下,可能需要数据迁移,...

    mysql、posrgresql转成clickhouse db工具sync-master

    然而,在实际业务中,我们往往需要将已有的MySQL或PostgreSQL数据库的数据迁移到ClickHouse,这时就需要借助特定的工具来实现。sync-master就是这样一款专为数据迁移而设计的开源工具,它使得从关系型数据库到...

    mysql数据库管理系统

    MySQL数据库管理系统是一款广泛应用于互联网领域的开源关系型数据库系统,由瑞典MySQL AB公司开发,目前已被Oracle公司收购。它以其高效、稳定和易用性而受到全球开发者和企业的青睐。MySQL基于SQL(Structured ...

    已瘦身的mysql 5.1.46

    7. **性能优化**:包括查询优化(编写高效的 SQL 查询)、分区表、视图、存储过程和触发器等,以及使用缓存(如 Query Cache)和调整参数配置来提升性能。 8. **备份与恢复**:定期备份数据库以防止数据丢失,可以...

Global site tag (gtag.js) - Google Analytics