环境:
普通表
innodb 一张表只有1个文件
需要先设置innodb 为独立表结构
mysql>create table a3(id int)engine=innodb partition by hash(id) partitions 5;
centOS6.4 32位
mysql5.1
分区实验
myisam
一、查看当前mysql是否支持分区
mysql>show plugins;
+------------+--------+----------------+---------+---------+
| Name | Status | Type | Library | License |
+------------+--------+----------------+---------+---------+
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
| partition | ACTIVE | STORAGE ENGINE | NULL | GPL | #有这一行且staus = ACTIVE ,表示支持分区
| CSV | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL |
| InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
+------------+--------+----------------+---------+---------+
二、普通表与分区表的区别
mysql>create table a1(id int)engine=myisam charset=utf8 partition by hash(id)partitions 5;
#cd /var/lib/mysql/test/
#ll
分区表
-rw-rw----. 1 mysql mysql 8556 Sep 5 22:20 a1.frm
-rw-rw----. 1 mysql mysql 40 Sep 5 22:20 a1.par #表示该表做了分区处理
-rw-rw----. 1 mysql mysql 0 Sep 5 22:20 a1#P#p0.MYD
-rw-rw----. 1 mysql mysql 1024 Sep 5 22:20 a1#P#p0.MYI
-rw-rw----. 1 mysql mysql 0 Sep 5 22:20 a1#P#p1.MYD
-rw-rw----. 1 mysql mysql 1024 Sep 5 22:20 a1#P#p1.MYI
-rw-rw----. 1 mysql mysql 0 Sep 5 22:20 a1#P#p2.MYD
-rw-rw----. 1 mysql mysql 1024 Sep 5 22:20 a1#P#p2.MYI
-rw-rw----. 1 mysql mysql 0 Sep 5 22:20 a1#P#p3.MYD
-rw-rw----. 1 mysql mysql 1024 Sep 5 22:20 a1#P#p3.MYI
-rw-rw----. 1 mysql mysql 0 Sep 5 22:20 a1#P#p4.MYD
-rw-rw----. 1 mysql mysql 1024 Sep 5 22:20 a1#P#p4.MYI
普通表
-rw-rw----. 1 mysql mysql 8556 Jun 22 08:25 a.frm
-rw-rw----. 1 mysql mysql 14 Jun 22 08:29 a.MYD
-rw-rw----. 1 mysql mysql 1024 Jun 22 08:29 a.MYI
-rw-rw----. 1 mysql mysql 65 Jun 22 08:25 db.opt
innodb表做分区
默认innodb表是共享表文件的
myisam 一张表有3个文件:
-rw-rw----. 1 mysql mysql 8608 Sep 6 00:31 no_part_tab.frm
-rw-rw----. 1 mysql mysql 223999972 Sep 6 01:35 no_part_tab.MYD
-rw-rw----. 1 mysql mysql 1024 Sep 6 01:35 no_part_tab.MYI
innodb 一张表只有1个文件
-rw-rw----. 1 mysql mysql 8556 Sep 6 02:03 a1.frm
需要先设置innodb 为独立表结构
# Uncomment the following if you are using InnoDB tables
innodb_data_home_dir = C:\mysql\data/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = C:\mysql\data/
innodb_log_arch_dir = C:\mysql\data/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
innodb_file_per_table =OFF #添加这一行,并将值改为1
innodb表被拆成了2个,这样就可以做分区了,分区方法和myisam 一样。
-rw-rw----. 1 mysql mysql 8556 Sep 6 02:20 a2.frm
-rw-rw----. 1 mysql mysql 98304 Sep 6 02:20 a2.ibd
mysql>create table a3(id int)engine=innodb partition by hash(id) partitions 5;
-rw-rw----. 1 mysql mysql 8556 Sep 6 02:24 a3.frm
-rw-rw----. 1 mysql mysql 40 Sep 6 02:24 a3.par
-rw-rw----. 1 mysql mysql 98304 Sep 6 02:24 a3#P#p0.ibd
-rw-rw----. 1 mysql mysql 98304 Sep 6 02:24 a3#P#p1.ibd
-rw-rw----. 1 mysql mysql 98304 Sep 6 02:24 a3#P#p2.ibd
-rw-rw----. 1 mysql mysql 98304 Sep 6 02:24 a3#P#p3.ibd
-rw-rw----. 1 mysql mysql 98304 Sep 6 02:24 a3#P#p4.ibd
分区表的性能
分区表的性能体现在对硬件的负载上。