`
tianshibaijia
  • 浏览: 1152905 次
文章分类
社区版块
存档分类
最新评论

mysql partition

 
阅读更多

part 1: 需求

很多时候,如果一个表的数据足够大的时候,操作(query,insert) 的效率就会降低。此时将一个表分区就变得必要


part 2: 帮助信息

url 1:http://dev.mysql.com/doc/refman/5.1/en/partitioning.html

# mysql 官方文档,讲解mysql partition

url 2:http://dev.mysql.com/doc/refman/5.1/en/alter-table-partition-operations.html

# mysql官方文档,讲解mysqll 修改分区

url 3:http://www.jzxue.com/shujuku/mysql/200912/24-3297.html

or http://www.jz123.cn/text/0826274.html

# 如果英文或是耐心不是太差,看url 1 和 url 2 的英文文档再加上测试就足够了。这里的中文文档也挺好的,可以看一下。


part 3: 概要讲解 & 应用举例

1:mysql partition 的类型主要有 range, list, hash, key 四种, 具体的语法结构和示例如下:

type 1: range

CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT NOT NULL,
store_id INT NOT NULL
)
PARTITION BY RANGE (store_id) (
PARTITION p0 VALUES LESS THAN (6),
PARTITION p1 VALUES LESS THAN (11),
PARTITION p2 VALUES LESS THAN (16),
PARTITION p3 VALUES LESS THAN (21),

PARTITION p3 VALUES LESS THAN MAXVALUE

);


type 2: list

CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT,
store_id INT
)
PARTITION BY LIST(store_id) (
PARTITION pNorth VALUES IN (3,5,6,9,17),
PARTITION pEast VALUES IN (1,2,10,11,19,20),
PARTITION pWest VALUES IN (4,12,13,14,18),
PARTITION pCentral VALUES IN (7,8,15,16)
);


type 3: hash

CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT,
store_id INT
)
PARTITION BY HASH( YEAR(hired) )
PARTITIONS 4;

type 4: key

CREATE TABLE tk (
col1 INT NOT NULL,
col2 CHAR(5),
col3 DATE
)
PARTITION BY LINEAR KEY (col1)
PARTITIONS 3;


2:mysql 子分区

CREATE TABLE ts (id INT, purchased DATE)
PARTITION BY RANGE( YEAR(purchased) )
SUBPARTITION BY HASH( TO_DAYS(purchased) )
SUBPARTITIONS 2 (
PARTITION p0 VALUES LESS THAN (1990),
PARTITION p1 VALUES LESS THAN (2000),
PARTITION p2 VALUES LESS THAN MAXVALUE
);


3: mysql 添加分区

mysql>alter table T_LOCATION add partition (partition p2012_09_01 values less than (TO_DAYS('2012-09-1')));


4: mysql 删除分区

mysql>alter table T_LOCATION_days drop partition p2012_09_01 ;

#NOTE: hash 分区中有 coalesce 分区


5: mysql 修改分区

mysql> alter table T_LOCATION reorganize partition p2012_09_01 into (partition p2012_10_01 values less than (TO_DAYS('2012-10-1')));
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0


7: 查看分区信息

mysql> select TABLE_NAME, PARTITION_NAME, TABLE_ROWS, AVG_ROW_LENGTH, DATA_LENGTH
from INFORMATION_SCHEMA.PARTITIONS
where TABLE_SCHEMA = 'LN_PABB' ;


8: 显示query 涉及的分区

mysql> explain partitions select count(*) from T_LOCATION_days where timestamp = '2010-05-05' \G; -- and timestamp < '2010-07-27' \G;


part 4: 常见问题

#todo


part 5: 规律总结

#todo

分享到:
评论

相关推荐

    MYSQL 通过分区(Partition)提升MySQL性能

    ### MySQL通过分区(Partition)提升性能 在数据库管理和优化领域,分区是一种常用的技术手段,它可以帮助提高查询效率、简化数据管理以及改善系统整体性能。本文将深入探讨如何利用MySQL中的分区功能来提升数据库...

    MySQL分区管理器MySQLPartitionManager.zip

    MySQL Partition Manager 是雅虎开源的 MySQL 分区管理器。它可以帮助你以最小的配置自动创建、维护、清除分区。 标签:MySQL

    (mysql面试题)MySQL中的分区表的概念及其作用及代码展示.txt

    ### MySQL中的分区表概念及其作用 #### 一、分区表定义 在MySQL中,分区表是一种高级技术,它允许用户将一个大型表物理地分割成若干个较小的部分,即分区。这种分割方式不仅可以显著提高查询效率,还可以简化数据...

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

    首先,尝试直接通过`ALTER TABLE`语句添加分区到非分区表会导致错误,MySQL会返回`ERROR 1505 &lt;HY000&gt;: Partition management on a not partitioned table is not possible`。正确的方法是创建一个新的具有相同结构...

    mysql-partition-and-Index.rar_partition

    本文件“mysql-partition-and-Index.rar_partition”着重介绍了这两个概念,结合实际操作示例进行深入讲解。 **分区(Partitioning)** MySQL的表分区是一种将大表物理分割成更小、更易管理的部分的方法。它将数据...

    mysql实现自动创建与删除分区

    MySQL数据库在大数据处理中扮演着重要角色,而分区技术是其优化查询性能的关键特性之一。本文将深入探讨如何实现MySQL的自动创建与删除分区,主要关注时间分区,并介绍相关存储过程和事件的设置。 首先,我们需要...

    代码:kafka数据接入到mysql中

    在Kafka集群中,数据被分片存储在多个分区(Partition)中,确保高可用性和可扩展性。 接下来,我们要介绍如何将Kafka的数据写入MySQL。一种常见的方法是使用Apache Kafka Connect,这是一个用于在Kafka和其它系统...

    创建mysql表分区的方法

    【MySQL 表分区详解】 MySQL 表分区是一种高级的数据组织技术,它允许将大型表分成较小、更易管理和处理的部分。这种技术对于处理海量数据,尤其是超过亿级别的数据集非常有效,可以显著提升查询性能和数据管理效率...

    mysql5.6编译安装

    -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DEXTRA_CHARSETS=all \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci ``` 配置完成后,运行`make`和`make install`来编译和安装MySQL。 6. **设置...

    mysql-5.5.32安装配置

    -DWITHOUT_PARTITION_STORAGE_ENGINE=1 \ -DWITH_FAST_MUTEXES=1 \ -DWITH_ZLIB=bundled \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_READLINE=1 \ -DWITH_EMBEDDED_SERVER=1 \ -DWITH_DEBUG=0 ``` 这段配置指定了 MySQL ...

    源码安装mysql5.6

    -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DEXTRA_CHARSETS=all \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci ``` 以上配置项中包含了MySQL的各种特性启用与禁用,例如MyISAM存储引擎、...

    MySQL分表实现上百万上千万记录分布存储的批量查询设计模式详解

    本文将深入探讨如何在Java环境中实现分表查询的设计模式,同时也会简要提及MySQL 5.1的partition功能。 1. **应用程序级别实现** 在应用程序级别实现分表查询,主要是通过创建一个`ElectThreadManager`,它是一个...

    mysql-5.7.38源码包及所需boost_1_59_0合集

    DWITH_XTRADB_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_IN...

    MySQL不停地自动重启的解决方法

    如文中所述,可以使用`--disable-partition-engine-check`选项跳过分区引擎检查,看是否解决了问题。 9. **安全模式启动**: 有时候,使用`mysqld_safe`命令以安全模式启动MySQL,可以帮助识别并解决问题。 10. ...

    MySQL分区分表方案实践手册

    要检查MySQL是否支持分区功能,可以通过执行`SHOW VARIABLES LIKE '%partition%'`命令来查看。MySQL从5.1版本开始正式支持分区功能。 #### 二、MySQL分区类型 根据分区规则的不同,MySQL支持多种分区类型: - **...

    Linux_RedHat下安装MySQL

    -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DWITH_FEDERATED_STORAGE_ENGINE=1 \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_XTRADB_STORAGE_ENGINE=1 \ -DWITH_DEBUG=0 ``` 完成配置后,执行`make`和`make install...

Global site tag (gtag.js) - Google Analytics