MySQL 系列文 - Partition Table(1) - 用途

前言

这次想写的系列文跟 Partition Table 有关,相信不管是用 MSSQL, MySQL 或是其他的资料库都有听过这个概念,不过我不会特别去说明该如何建立,相信网路上已经有很多建立的方式,我这里会针对实务上遇到的几个问题,以及如何解决的来做分享,大概会有以下几个主题

用途在既有的 TABLE 上建立 partitionpartition 数量与效能的影响partition by 日期的方式

用途

很多人第一次接触到 partition Table 的情况是,随着日子过去,资料量越来越大,搜寻资料的速度越来越慢,开始想找一些方式把资料分散,此时可能会查到几点

分表:

实体分表,例如把身分证开头 A 的放在一张表,身分证开头 F 的放在另一张表缺点是每张表的名称都不一样,还要依据不同表名称下SQL语法,对应到正确的分表上。而且如果要捞出所有的人,所有表都要 UNION起来。

分区(partition):

实际上看到的还是同一个表,对于应用层也比较单纯,且不需要修改但是物理上可以拆分在不同的位置举个简单的例子,如下图1

绿色框框的 tb1 是没有建 partition 的 TABLE ,可以看到只有一个 ibd 档案
红色框框的 tb2 是有建两个 partition 的 TABLE,可以看到有两个 ibd 档案
http://img2.58codes.com/2024/20124671efKxnkTDoB.png
图1

★ 建上面两个 TABLE 的语法如下

CREATE TABLE `tb1` (  `trans_id` int NOT NULL AUTO_INCREMENT,  `lang_id` int NOT NULL,  `lang` char(5) NOT NULL,  `trans_text` text,  PRIMARY KEY (`trans_id`,`lang_id`)) ENGINE=InnoDB  DEFAULT CHARSET=utf8;CREATE TABLE `tb2` (  `trans_id` int NOT NULL AUTO_INCREMENT,  `lang_id` int NOT NULL,  `lang` char(5) NOT NULL,  `trans_text` text,  PRIMARY KEY (`trans_id`,`lang_id`)) ENGINE=InnoDB  DEFAULT CHARSET=utf8PARTITION BY LIST (`lang_id`)( PARTITION pt1 VALUES IN (1) ENGINE = InnoDB, PARTITION pt2 VALUES IN (2) ENGINE = InnoDB) ;

小结

这里的 partition (分区) 就是本次主题想讨论的,也希望透过接下来的系列分享,让大家对于 partition 上有更进一步的认识。

资料库知识相当广泛,文中若有不正确的地方,也烦请各位大神不吝指教,谢谢


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章