`
ytfei
  • 浏览: 89697 次
社区版块
存档分类
最新评论

mysql 分区学习笔记

阅读更多
(以下的排版我汗一个。。。 在编辑的时候显示是有段落的,保存后居然是这个样子的。。。) 分区的类型有 range,list,hash,key 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, store_id INT ) PARTITION BY RANGE (YEAR(separated)) ( PARTITION p0 VALUES LESS THAN (1991), PARTITION p1 VALUES LESS THAN (1996), PARTITION p2 VALUES LESS THAN (2001), PARTITION p3 VALUES LESS THAN MAXVALUE ); range(exp) exp 计算结果必须在 values less than 的取值范围当中 less than 的取值必须由小到大 2.list 其中“expr” 是某列值或一个基于某个列值、并返回一个整数值的表达式,然后通过“VALUES IN (value_list)”的方式来定义每个分区,其中“value_list”是一个通过逗号分隔的整数列表。 注释:在MySQL 5.1中,当使用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) ); 删除某个分区的数据: ALTER TABLE employees DROP PARTITION pWest; 3.hash HASH分区主要用来确保数据在预先确定数目的分区中平均分布 PARTITION BY HASH (expr)”子句,其中“expr”是一个返回一个整数的表达式 PARTITIONS num”子句,其中num 是一个非负的整数,它表示表将要被分割成分区的数量。 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(store_id) PARTITIONS 4; *最有效率的哈希函数是只对单个表列进行计算,并且它的值随列值进行一致地增大或减小,也就是说,表达式值和它所基于的列的值变化越接近,MySQL就可以越有效地使用该表达式来进行HASH分区。 换句话说,如果列值与表达式值之比的曲线图越接近由等式“y=nx(其中n为非零的常数)描绘出的直线,则该表达式越适合于 哈希 3.1 LINEAR HASH 1.) 找到下一个大于num.的、2的幂,我们把这个值称为V ,它可以通过下面的公式得到: 2.) V = POWER(2, CEILING(LOG(2, num))) (例如,假定num是13。那么LOG(2,13)就是3.7004397181411。 CEILING(3.7004397181411)就是4,则V = POWER(2,4), 即等于16)。 3.) 设置 N = F(column_list) & (V - 1). 4.) 当 N >= num: 设置 V = CEIL(V / 2) 设置 N = N & (V - 1) 按照线性哈希分区的优点在于增加、删除、合并和拆分分区将变得更加快捷,有利于处理含有极其大量(1000吉)数据的表。它的缺点在于,与使用常规HASH分区得到的数据分布相比,各个分区间数据的分布不大可能均衡。 4.key 按照KEY进行分区类似于按照HASH分区,除了HASH分区使用的用户定义的表达式,而KEY分区的 哈希函数是由MySQL 服务器提供 “CREATE TABLE ... PARTITION BY KEY”的语法规则类似于创建一个通过HASH分区的表的规则。它们唯一的区别在于使用的关键字是KEY而不是HASH,并且KEY分区只采用一个或多个列名的一个列表。 通过线性KEY分割一个表也是可能的。下面是一个简单的例子: CREATE TABLE tk ( col1 INT NOT NULL, col2 CHAR(5), col3 DATE ) PARTITION BY LINEAR KEY (col1) PARTITIONS 3; 二。 子分区: 子分区结合 range,list 与 hash,key 分区 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 ); 表ts 有3个RANGE分区。这3个分区中的每一个分区——p0, p1, 和 p2 ——又被进一步分成了2个子分区。实际上,整个表被分成了3 * 2 = 6个分区 CREATE TABLE ts (id INT, purchased DATE) PARTITION BY RANGE(YEAR(purchased)) SUBPARTITION BY HASH(TO_DAYS(purchased)) ( PARTITION p0 VALUES LESS THAN (1990) ( SUBPARTITION s0, SUBPARTITION s1 ), PARTITION p1 VALUES LESS THAN (2000) ( SUBPARTITION s2, SUBPARTITION s3 ), PARTITION p2 VALUES LESS THAN MAXVALUE ( SUBPARTITION s4, SUBPARTITION s5 ) ); 以上作用和上一个例子相同,但是要注意: 1.每个分区必须有相同数量的子分区。 2.每个SUBPARTITION 子句必须包括 (至少)子分区的一个名字 子分区可以用于特别大的表,在多个磁盘间分配数据和索引。假设有6个磁盘,分别为/disk0, /disk1, /disk2等。现在考虑下面的例子: CREATE TABLE ts (id INT, purchased DATE) PARTITION BY RANGE(YEAR(purchased)) SUBPARTITION BY HASH(TO_DAYS(purchased)) ( PARTITION p0 VALUES LESS THAN (1990) ( SUBPARTITION s0 DATA DIRECTORY = '/disk0/data' INDEX DIRECTORY = '/disk0/idx', SUBPARTITION s1 DATA DIRECTORY = '/disk1/data' INDEX DIRECTORY = '/disk1/idx' ), PARTITION p1 VALUES LESS THAN (2000) ( SUBPARTITION s0 DATA DIRECTORY = '/disk2/data' INDEX DIRECTORY = '/disk2/idx', SUBPARTITION s1 DATA DIRECTORY = '/disk3/data' INDEX DIRECTORY = '/disk3/idx' ), PARTITION p2 VALUES LESS THAN MAXVALUE ( SUBPARTITION s0 DATA DIRECTORY = '/disk4/data' INDEX DIRECTORY = '/disk4/idx', SUBPARTITION s1 DATA DIRECTORY = '/disk5/data' INDEX DIRECTORY = '/disk5/idx' ) ); 三、MySQL分区处理NULL值的方式 MySQL 中的分区在禁止空值(NULL)上没有进行处理,无论它是一个列值还是一个用户定义表达式的值。一般而言,在这种情况下MySQL 把NULL视为0。如果你希望回避这种做法,你应该在设计表时不允许空值;最可能的方法是,通过声明列“NOT NULL”来实现这一点。 四、分区管理语句 “REORGANIZE PARTITION”的基本语法是: ALTER TABLE tbl_name REORGANIZE PARTITION partition_list INTO (partition_definitions); 拆分分区:(不丢失数据) ALTER TABLE members REORGANIZE PARTITION p0 INTO ( PARTITION s0 VALUES LESS THAN (1960), PARTITION s1 VALUES LESS THAN (1970) ); 合并分区: ALTER TABLE members REORGANIZE PARTITION s0,s1 INTO ( PARTITION p0 VALUES LESS THAN (1970) ); ALTER TABLE members REORGANIZE PARTITION p0,p1,p2,p3 INTO ( PARTITION m0 VALUES LESS THAN (1980), PARTITION m1 VALUES LESS THAN (2000) ); 注意点: 1.新分区模式不能有任何重叠的区间(适用于按照RANGE分区的表)或值集合(适用于重新组织按照LIST分区的表)。 2.partition_definitions 列表中分区的合集应该与在partition_list 中命名分区的合集占有相同的区间或值集合。 3.对于按照RANGE分区的表,只能重新组织相邻的分区;不能跳过RANGE分区。 4.不能使用REORGANIZE PARTITION来改变表的分区类型 如果想在不删除和重建表的条件下实现这两个任务,可以使用“ALTER TABLE ... PARTITION BY ....”,例如: · ALTER TABLE members · PARTITION BY HASH(YEAR(dob)) · PARTITIONS 8;
分享到:
评论
1 楼 lijunlong 2011-01-19  
恩,晕

相关推荐

    mysql 个人学习笔记

    MySQL是世界上最受欢迎的关系型数据库管理...以上只是MySQL学习笔记的一部分内容,实际的学习过程中,你还会接触到触发器、分区、复制、集群等更高级的主题。不断实践和深入研究,才能真正掌握这个强大的数据库系统。

    超经典mysql dba 学习笔记.zip

    这份“超经典mysql dba学习笔记”包含了丰富的MySQL运维知识,对于想要深入理解和掌握MySQL DBA技能的人来说是一份宝贵的资料。 一、MySQL基础知识 在学习MySQL DBA之前,首先需要了解MySQL的基本概念,包括数据库...

    MySQL学习笔记.zip

    这份“MySQL学习笔记”将引导我们深入理解其核心概念和实用技能。 一、MySQL简介 MySQL是一个开源、免费的数据库系统,由瑞典的MySQL AB公司开发,后被Oracle公司收购。它的设计目标是速度、可移植性和简洁性,支持...

    Mysql学习笔记.pdf

    MySQL 是一款广泛使用的开源关系型数据库管理系统,其学习笔记涵盖了多个关键知识点。以下是对这些知识点的详细解释: 1. **MySQL 体系架构** - **网络连接层**:处理客户端的连接请求,包括连接管理、认证和安全...

    Mysql详细学习笔记.rar

    这份“Mysql详细学习笔记”显然是一个深入解析MySQL的资源,旨在帮助初学者和有经验的开发者更好地理解和运用SQL语句。以下是笔记中可能包含的一些核心知识点: 1. **SQL基础**:SQL(Structured Query Language)...

    MySQL 工作学习笔记.zip

    这份“MySQL工作学习笔记”压缩包文件可能是由一位经验丰富的数据库管理员或开发者整理,包含了关于MySQL的深入理解和实践技巧。尽管没有具体的标签来指导,但我们可以从“MySQL工作学习笔记”这个标题推测,内容...

    一千行 MySQL 学习笔记.pdf

    ### MySQL学习笔记知识点详解 #### 一、MySQL服务管理 **1. 启动MySQL服务** 在Windows环境中,可以通过以下命令启动MySQL服务: ```sql net start mysql ``` **2. 创建Windows服务** 若要手动创建一个...

    MySQL大纲学习笔记

    本学习笔记旨在提供全面的MySQL语法知识,帮助读者从基础到进阶,掌握数据库管理和开发的基本技能。 首先,我们需要理解SQL(Structured Query Language),这是一种用于管理关系数据库的标准编程语言。SQL的主要...

    MySQL数据库学习笔记.zip

    这份"MySQL数据库学习笔记.zip"文件很可能包含了关于MySQL的基本概念、安装与配置、SQL语句、表的设计、索引、视图、存储过程、触发器、事务处理、备份与恢复等多方面的内容。下面我们将深入探讨这些关键知识点。 1...

    Linux下mysql学习笔记

    【Linux下MySQL学习笔记】 MySQL是一款广泛应用于互联网的开源关系型数据库管理系统,尤其在Linux操作系统上,其稳定性和性能表现尤为突出。本笔记主要针对在Linux环境下安装、配置、管理和优化MySQL的过程进行详解...

    mysql一些学习笔记.zip

    以上只是MySQL学习笔记的一部分,实际的学习过程中还应包括更多的实践操作和进阶主题,如性能监控、备份恢复、InnoDB引擎特性和SQL高级特性等。对于Kwan1117这个文件名,可能是作者的个人标识或特定的学习章节,具体...

    mysql入门学习笔记,优化

    这篇入门学习笔记将带你深入了解MySQL的基础知识,以及如何进行性能优化。让我们逐一探讨这些主题。 首先,数据库概述:MySQL是一个开源、免费的数据库系统,基于SQL(结构化查询语言)标准,由Oracle公司维护。它...

    MySQL5学习笔记.pdf

    MySQL 5.1是该系列的一个重要版本,引入了对事务处理的支持和分区表功能,这些特性显著提升了其在企业级应用中的性能和可靠性。 MySQL的基础知识包括以下几个方面: 1. **MySQL安装**:MySQL可以从官方网站...

    MySQL 的学习笔记.zip

    以上内容仅是MySQL学习笔记的一部分,深入学习还需涵盖更多高级主题,如性能优化、备份与恢复、SQL性能分析等。在实际应用中,理解这些概念并熟练运用,能够帮助开发者构建高效、可靠的数据库解决方案。

    超经典MySQL DBA培训笔记

    这份“超经典MySQL DBA培训笔记”显然涵盖了MySQL数据库管理的各个方面,是DBA或者对MySQL有兴趣的学习者的重要参考资料。接下来,我将根据这个主题,详细解释MySQL DBA需要掌握的关键知识点。 1. **MySQL基础知识*...

    鲁班学员mysql底层原理分析学习笔记

    这篇鲁班学院的MySQL底层原理分析学习笔记将深入探讨MySQL的核心机制,帮助读者理解数据存储、查询优化、事务处理以及并发控制等关键概念。 1. **存储引擎**:MySQL支持多种存储引擎,如InnoDB(事务安全,支持行级...

    尚硅谷mysql笔记.zip

    尚硅谷的MySQL笔记可能是为了帮助学习者深入理解和掌握MySQL的相关知识而编写的。这份笔记可能包含了从基础概念到高级特性的全面讲解,包括但不限于SQL语言、数据类型、数据库设计、索引、事务处理、视图、存储过程...

    《高性能MySQL》学习笔记.zip

    通过阅读《高性能MySQL》的学习笔记,读者不仅可以深入了解MySQL的内部工作原理,还能掌握实践中的优化技巧,从而提升数据库的运行效率和系统的整体性能。无论是开发人员还是DBA,这本书都是不可多得的参考资料。

    mysql的学习笔记——mysql的核心概念、使用到哪些技术、以及实现。.zip

    这份“mysql的学习笔记”涵盖了MySQL的核心概念、所涉及的技术以及如何实现它们。让我们深入探讨一下这些关键点。 **核心概念** 1. **关系型数据库**: MySQL基于关系型数据库模型,其中数据以表格形式存储,每个...

    1000 行 MySQL 学习笔记,史上最全珍藏版!.docx

    本篇学习笔记涵盖了从基础操作到高级特性的全面内容,旨在帮助读者从初级到高级提升MySQL技能,成为一名数据库管理员。 首先,我们从MySQL的启动和管理开始。在Windows环境下,可以使用`net start mysql`命令来启动...

Global site tag (gtag.js) - Google Analytics