共计 2158 个字符,预计需要花费 6 分钟才能阅读完成。
如何通过 Partition 分区提升 MySQL 性能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面丸趣 TV 小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
什么是分区?
数据库分区是一种物理技术,DBA 和数据库建模人员对其相当熟悉。虽然分区技术可以实现很多效果,但其主要目的是为了在特定的 SQL 操作中减少数据读写的总量以缩减响应时间。
分区主要有两种形式:// 这里一定要注意行和列的概念(row 是行,column 是列)
1. 水平分区 (Horizontal Partitioning) 这种形式分区是对表的行进行分区,通过这样的方式不同分组里面的物理列分割的数据集得以组合,从而进行个体分割 (单分区) 或集体分割(1 个或多个分区)。所有在表中定义的列在每个数据集中都能找到,所以表的特性依然得以保持。
举个简单例子:一个包含十年发票记录的表可以被分区为十个不同的分区,每个分区包含的是其中一年的记录。(朋奕注:这里具体使用的分区方式我们后面再说,可以先说一点,一定要通过某个属性列来分割,譬如这里使用的列就是年份)
2. 垂直分区(Vertical Partitioning) 这种分区方式一般来说是通过对表的垂直划分来减少目标表的宽度,使某些特定的列 被划分到特定的分区,每个分区都包含了其中的列所对应的行。
举个简单例子:一个包含了大 text 和 BLOB 列的表,这些 text 和 BLOB 列又不经常被访问,这时候就要把这些不经常使用的 text 和 BLOB 了划分到另一个分区,在保证它们数据相关性的同时还能提高访问速度。
在数据库供应商开始在他们的数据库引擎中建立分区 (主要是水平分区) 时,DBA 和建模者必须设计好表的物理分区结构,不要保存冗余的数据 (不同表中同时都包含父表中的数据) 或相互联结成一个逻辑父对象(通常是视图)。这种做法会使水平分区的大部分功能失效,有时候也会对垂直分区产生影响。
在 MySQL 5.1 中进行分区
MySQL5.1 中最激动人心的新特性应该就是对水平分区的支持了。这对 MySQL 的使用者来说确实是个好消息,而且她已经支持分区大部分模式:
Range(范围) ndash; 这种模式允许 DBA 将数据划分不同范围。例如 DBA 可以将一个表通过年份划分成三个分区,80 年代 (1980 rsquo;s) 的数据,90 年代 (1990 rsquo;s) 的数据以及任何在 2000 年 (包括 2000 年) 后的数据。
Hash(哈希) ndash; 这中模式允许 DBA 通过对表的一个或多个列的 Hash Key 进行计算,最后通过这个 Hash 码不同数值对应的数据区域进行分区,。例如 DBA 可以建立一个对表主键进行分区的表。
Key(键值) ndash; 上面 Hash 模式的一种延伸,这里的 Hash Key 是 MySQL 系统产生的。
List(预定义列表) ndash; 这种模式允许系统通过 DBA 定义的列表的值所对应的行数据进行分割。例如:DBA 建立了一个横跨三个分区的表,分别根据 2004 年 2005 年和 2006 年值所对应的数据。
Composite(复合模式) – 很神秘吧,哈哈,其实是以上模式的组合使用而已,就不解释了。举例:在初始化已经进行了 Range 范围分区的表上,我们可以对其中一个分区再进行 hash 哈希分区。
分区带来的好处太多太多了,有多少? 俺也不知道,自己猜去吧,要是觉得没有多少就别用,反正俺也不求你用。不过在这里俺强调两点好处:
性能的提升 (Increased performance) – 在扫描操作中,如果 MySQL 的优化器知道哪个分区中才包含特定查询中需要的数据,它就能直接去扫描那些分区的数据,而不用浪费很多时间扫描不需要的地方了。需要举个例子? 好啊,百万行的表划分为 10 个分区,每个分区就包含十万行数据,那么查询分区需要的时间仅仅是全表扫描的十分之一了,很明显的对比。同时对十万行的表建立索引的速度也会比百万行的快得多得多。如果你能把这些分区建立在不同的磁盘上,这时候的 I / O 读写速度就“不堪设想”(没用错词,真的太快了,理论上 100 倍的速度提升啊,这是多么快的响应速度啊,所以有点不堪设想了) 了。
对数据管理的简化(Simplified data management) – 分区技术可以让 DBA 对数据的管理能力提升。通过优良的分区,DBA 可以简化特定数据操作的执行方式。例如:DBA 在对某些分区的内容进行删除的同时能保证余下的分区的数据完整性(这是跟对表的数据删除这种大动作做比较的)。
此外分区是由 MySQL 系统直接管理的,DBA 不需要手工的去划分和维护。例如:这个例如没意思,不讲了,如果你是 DBA,只要你划分了分区,以后你就不用管了就是了。
站在性能设计的观点上,俺们对以上的内容也是相当感兴趣滴。通过使用分区和对不同的 SQL 操作的匹配设计,数据库的性能一定能获得巨大提升。下面咱们一起用用这个 MySQL 5.1 的新功能看看。
下面所有的测试都在 Dell Optiplex box with a Pentium 4 3.00GHz processor, 1GB of RAM 机器上,Fedora Core 4 和 MySQL 5.1.6 alpha 上运行通过。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注丸趣 TV 行业资讯频道,感谢您对丸趣 TV 的支持。