加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

MYSQL数据库MySQL数据库分区功能的使用教程

发布时间:2020-12-24 10:01:17 所属栏目:编程 来源:网络整理
导读:《MYSQL数据库MySQL数据库分区功能的使用教程》要点: 本文介绍了MYSQL数据库MySQL数据库分区功能的使用教程,希望对您有用。如果有疑问,可以联系我们。 零,什么是数据库分区 来说一下什么是数据库分区,以mysql为例.mysql数据库中的数据是以文件的形势存在
副标题[/!--empirenews.page--]

《MYSQL数据库MySQL数据库分区功能的使用教程》要点:
本文介绍了MYSQL数据库MySQL数据库分区功能的使用教程,希望对您有用。如果有疑问,可以联系我们。

零,什么是数据库分区
来说一下什么是数据库分区,以mysql为例.mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可以通过my.cnf中的datadir来查看),一张表主要对应着三个文件,一个是frm存放表结构的,一个是myd存放表数据的,一个是myi存表索引的.如果一张表的数据量太大的话,那么myd,myi就会变的很大,查找数据就会变的很慢,这个时候我们可以利用mysql的分区功能,在物理上将这一张表对应的三个文件,分割成许多个小块,这样呢,我们查找一条数据时,就不用全部查找了,只要知道这条数据在哪一块,然后在那一块找就行了.如果表的数据太大,可能一个磁盘放不下,这个时候,我们可以把数据分配到不同的磁盘里面去.MYSQL实例

一,横向分区
什么是横向分区呢?就是横着来分区了,举例来说明一下,假如有100W条数据,分成十份,前10W条数据放到第一个分区,第二个10W条数据放到第二个分区,依此类推.也就是把表分成了十分,根用merge来分表,有点像哦.取出一条数据的时候,这条数据包含了表结构中的所有字段,也就是说横向分区,并没有改变表的结构.MYSQL实例

ALTER TABLE `yl_hospital_url` PARTITION BY RANGE(ID) ( 
PARTITION `p0` VALUES LESS THAN (100000),PARTITION `p1` VALUES LESS THAN (200000),PARTITION `p2` VALUES LESS THAN (300000),PARTITION `p3` VALUES LESS THAN (400000),PARTITION `p4` VALUES LESS THAN (500000),PARTITION `p5` VALUES LESS THAN (600000),PARTITION `p6` VALUES LESS THAN (700000),PARTITION `p7` VALUES LESS THAN (MAXVALUE)  
) ; 

分区前查询速度
MYSQL实例

MYSQL数据库MySQL数据库分区功能的使用教程

MYSQL实例

分区前查询速度
MYSQL实例

MYSQL数据库MySQL数据库分区功能的使用教程

MYSQL实例

二,mysql的分区
我觉着吧,mysql的分区只有一种方式,只不过运用不同的算法,蚪莘峙涞讲煌那橹卸选
1,mysql5.1及以上支持分区功能
安装安装的时候,我们就可以查看一下MYSQL实例

[root@BlackGhost mysql-5.1.50]# ./configure --help |grep -A 3 Partition 
 === Partition Support === 
 Plugin Name:   partition 
 Description:   MySQL Partitioning Support 
 Supports build:  static 
 Configurations:  max,max-no-ndb 

?查看一下,如果发现有上面这个东西,说明他是支持分区的,默认是打开的.如果你已经安装过了mysql的话MYSQL实例

mysql> show variables like "%part%"; 
+-------------------+-------+ 
| Variable_name   | Value | 
+-------------------+-------+ 
| have_partitioning | YES  | 
+-------------------+-------+ 
1 row in set (0.00 sec) 

?查看一下变量,如果支持的话,会有上面的提示的.MYSQL实例

2,range分区
按照RANGE分区的表是通过如下一种方式进行分区的,每个分区包含那些分区表达式的值位于一个给定的连续区间内的行MYSQL实例

创建range分区表?
MYSQL实例

mysql> CREATE TABLE IF NOT EXISTS `user` ( 
 ->  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',->  `name` varchar(50) NOT NULL DEFAULT '' COMMENT '名称',->  `sex` int(1) NOT NULL DEFAULT '0' COMMENT '0为男,1为女',->  PRIMARY KEY (`id`) 
 -> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 
 -> PARTITION BY RANGE (id) ( 
 ->   PARTITION p0 VALUES LESS THAN (3),->   PARTITION p1 VALUES LESS THAN (6),->   PARTITION p2 VALUES LESS THAN (9),->   PARTITION p3 VALUES LESS THAN (12),->   PARTITION p4 VALUES LESS THAN MAXVALUE 
 -> ); 
Query OK,0 rows affected (0.13 sec) 

?
插入一些数据??
MYSQL实例

mysql> INSERT INTO `test`.`user` (`name`,`sex`)VALUES ('tank','0') 
 ->,('zhang',1),('ying',('张',('映',0),('test1',('tank2',1) 
 ->,('tank1',('test2',('test3',('test4',('test5',('tank3',('tank4',('tank5',('tank6',('tank7',('tank8',('tank9',('tank10',('tank11',('tank12',('tank13',('tank21',('tank42',1); 
Query OK,25 rows affected (0.05 sec) 
Records: 25 Duplicates: 0 Warnings: 0 

?
到存放数据库表文件的地方看一下,my.cnf里面有配置,datadir后面就是??
MYSQL实例

[root@BlackGhost test]# ls |grep user |xargs du -sh 
4.0K  user#P#p0.MYD 
4.0K  user#P#p0.MYI 
4.0K  user#P#p1.MYD 
4.0K  user#P#p1.MYI 
4.0K  user#P#p2.MYD 
4.0K  user#P#p2.MYI 
4.0K  user#P#p3.MYD 
4.0K  user#P#p3.MYI 
4.0K  user#P#p4.MYD 
4.0K  user#P#p4.MYI 
12K  user.frm 
4.0K  user.par 

?
取出数据??
MYSQL实例

mysql> select count(id) as count from user; 
+-------+ 
| count | 
+-------+ 
|  25 | 
+-------+ 
1 row in set (0.00 sec) 

?
删除第四个分区??
MYSQL实例

mysql> alter table user drop partition p4; 
Query OK,0 rows affected (0.11 sec) 
Records: 0 Duplicates: 0 Warnings: 0 

??
MYSQL实例

/**存放在分区里面的数据丢失了,第四个分区里面有14条数据,剩下的3个分区 
只有11条数据,但是统计出来的文件大小都是4.0K,从这儿我们可以看出分区的 
最小区块是4K 
*/ 
mysql> select count(id) as count from user; 
+-------+ 
| count | 
+-------+ 
|  11 | 
+-------+ 
1 row in set (0.00 sec) 

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读