本节提供了一个概念性的概述在MySQL 5.7分区。
分区限制和功能限制的更多信息,请参阅22.6节,“限制和限制分区”。
SQL标准没有提供太多关于数据存储的物理方面的指导。SQL语言本身的目的是独立工作的任何数据结构或媒体的模式、表、行、列,它的工作原理。尽管如此,最先进的数据库管理系统已经进化的一些手段确定物理位置用于存储特定数据的文件系统,硬件,甚至两个。在MySQL中,InnoDB
存储引擎一直支持表空间的概念,和MySQL服务器,甚至引入分区前,可以配置为使用不同的物理目录来存储不同的数据库(见部分8.12.3”,使用符号链接”这是如何实现的,对于一个解释)。
分区将这个概念进一步,通过使你分配的部分个体表跨文件系统根据规则可以设置主要是必要的。实际上,不同部分的一个表存储作为单独的表在不同的位置。用户选择规则的部门的数据是被称为来完成的分区功能在MySQL可以模量,简单的匹配对一组范围或值列表,一个内部哈希函数,或一个线性哈希函数。选择功能根据用户指定的分区类型,并以用户提供的表达式的值作为参数。这个表达式可以是列值,函数作用于一个或多个列值,或一组一个或多个列值,根据分区所使用的类型。
在的情况下范围
,列表
,(线性
]哈希
分区,分区列的值传递给分区函数,该函数返回一个整数值代表特定的分区数量应该存储记录。这个函数必须非常数的和非随机的。它可能不包含任何查询,但可能在MySQL中使用一个SQL表达式是有效的,只要表达式返回零
或一个整数intval中
这样
maxvalue < =intval中< = MAXVALUE
(MAXVALUE
用于表示的整数类型的最小上界问题。maxvalue
代表了最大下界。)
对于[线性
]关键
,范围列
,名单列
分区,分区表达式由一个或多个列的列表。
对于[线性
]关键
分区,分区函数是由MySQL。
关于允许分区列类型的更多信息和分区功能,看看22.2节,“分区类型”,以及部分13.1.18,“CREATE TABLE语句”,它提供了分区语法描述和额外的例子。分区功能,限制信息部分22.6.3,“功能分区相关的限制”。
这就是所谓的水平分区,也就是不同的表行可能被分配到不同的物理分区。MySQL 5.7不支持垂直分区,不同的列一个表被分配到不同的物理分区。没有计划在这个时候在MySQL中引入垂直分区。
确定您的MySQL服务器的二进制信息支持用户定义的分区,明白了22章,分区。
创建分区表,可以使用大多数存储引擎,支持你的MySQL服务器;MySQL分区引擎运行在一个单独的图层,可以与任何这些交互。在MySQL 5.7中,所有分区的分区表必须使用相同的存储引擎;例如,您不能使用MyISAM
对一个分区和InnoDB
另一个。然而,没有什么阻止你使用不同的存储引擎不同的分区表相同的MySQL服务器,甚至在同一个数据库中。
MySQL分区不能使用合并
,CSV
,或联邦
存储引擎。
分区的关键
或线性关键
是可能的,NDB
,但不支持其他类型的用户定义的分区表使用这个存储引擎。此外,一个NDB
表,使用用户定义的分区必须有一个明确的主键,和任何列中引用表的分区表达式必须是主键的一部分。然而,如果没有列中列出分区的关键
或通过线性键分区
条款的创建表
或ALTER TABLE
语句用于创建或修改一个user-partitionedNDB
表,表不需要有一个明确的主键。有关更多信息,请参见部分21.2.7.1,“NDB集群不遵守的SQL语法”。
使用一个特定的分区表的存储引擎,它只使用是必要的(存储)引擎
选择就像一个分区表。但是,你应该记住(存储)引擎
(和其他表选项)需要列出之前任何分区选项中使用创建表
声明。这个例子展示了如何创建一个表由散列分区成6分区和使用InnoDB
存储引擎:
创建表ti (INT id,数量小数(7,2),tr_date日期)引擎= INNODB由散列分区(tr_date)(月)分区6;
每一个分区
条款可以包括(存储)引擎
MySQL 5.7中选择,但这没有影响。
分区表适用于所有数据和索引;你不能只分区数据而不是索引,反之亦然,你也不能只分区表的一部分。
数据和索引为每个分区可以分配给一个特定的目录中使用数据目录
和索引目录
选项分区
条款的创建表
语句用于创建分区表。
数据目录
和索引目录
不支持单个分区或subpartitions的MyISAM
表在Windows。
只有数据目录
选择是支持个人的分区和subpartitionsInnoDB
表。
表的分区中使用的所有列表达式必须是每一个唯一键表的一部分,包括任何主键。这意味着表等,由下列SQL语句,不能分区:
创建表tnp (id INT NOT NULL AUTO_INCREMENT ref BIGINT NOT NULL,名字VARCHAR(255),主键pk (id),英国唯一键(名称));
因为钥匙pk
和英国
没有列共同点,没有可用列一个分区的表达式。在这种情况下可能的解决方法包括添加的名字
列到表的主键,添加id
列英国
,或者干脆完全删除唯一键。看到部分22.6.1”,分区键、主键和惟一键”为更多的信息。
此外,MAX_ROWS
和MIN_ROWS
可以用来确定最大和最小数量的行,分别可以存储在每个分区中。看到22.3节,“分区管理”关于这些选项的更多信息。
的MAX_ROWS
选项也可以用于创建NDB集群表分区,从而允许更大的散列存储索引。看到的文档10bet官方网站DataMemory
数据节点配置参数,以及21.2.2节”,NDB集群节点、节点组、片段副本和分区”为更多的信息。
这里列出了一些优势的分区:
分区可以存储更多的数据在一个表可以举行一个磁盘或文件系统分区。
数据失去效用通常可以很容易从一个分区表被删除分区(或分区)只包含这些数据。相反,添加新数据的过程在某些情况下可以大大促进通过添加一个或多个新的分区专门用于存储这些数据。
一些查询可以大大优化数据满足给定的事实
在哪里
条款只可以存储在一个或多个分区,从搜索自动排除任何剩余的分区。因为分区可以更改创建分区表后,你可以重新组织数据以提高频繁查询时可能没有被经常使用的分区方案最初设置。这种排除的能力匹配的分区(因此它们包含任何行)通常被称为分区修剪。有关更多信息,请参见22.4节,“分区修剪”。此外,MySQL支持显式分区选择查询。例如,
SELECT * FROM t分区(p0, p1) c < 5
在分区只选择那些行p0
和p1
相匹配的在哪里
条件。在这种情况下,MySQL不检查任何其他分区的表t
;这可以大大加快查询,当你已经知道你想检查分区或分区。分区的选择还支持数据修改语句删除
,插入
,取代
,更新
,加载数据
,加载XML
。看到这些语句的描述的更多信息和示例。