MySQL5.6开始可以使用独立表空间, innodb_file_per_table=1

MySQL5.6开始可以使用独立表空间:
MySQL5.6 
innodb_file_per_table=1 #使用独立表空间,动态参数。(5.6默认OFF,5.7默认ON)


1、 drop/truncate table方式操作表空间能自动回收(磁盘空间)

1)、创建procedure,循环insert一定量数据
##use test
##drop procedure pro1;

DELIMITER //
create procedure pro1()
begin
declare i int;
set i=1;
while i<100000 do
    insert into test.cc(id,name) values(i, "aa");
    set i=i+1;
end while;
end;//

2)、调用procedure :
mysql> call pro1();


3)、查看表大小、数据量:
select table_name, (data_length+index_length)/1024/1024 as total_mb, table_rows
   from information_schema.tables where table_schema='test' and table_name='CC';

+------------+------------+------------+
| table_name | total_mb   | table_rows |
+------------+------------+------------+
| cc         | 3.51562500 |     100246 |
+------------+------------+------------+
1 row in set (0.31 sec)

4)、truncate清表:
mysql> truncate table test.cc;
Query OK, 0 rows affected (0.73 sec)

5)、再次查看表空间已经回收:

cc.ibd 由  11264KB 回收到96KB 。

mysql> select table_name, (data_length+index_length)/1024/1024 as total_mb, table_rows
    -> from information_schema.tables where table_schema='test' and table_name='CC';
+------------+------------+------------+
| table_name | total_mb   | table_rows |
+------------+------------+------------+
| cc         | 0.01562500 |          0 |
+------------+------------+------------+
1 row in set (0.00 sec)

mysql>

mysql> select version();
+------------+
| version()  |
+------------+
| 5.7.11-log |
+------------+
1 row in set (0.08 sec)

mysql>

注:drop table test.cc ; 物理文件cc.ibd也会同时被删除。


2、独立表空间下,可以自定义表的存储位置,(有时将部分热表放在不同的磁盘可有效地提升IO性能)
create table test(id int) data directory='c:/software';
create table test1(id int,name varchar(20),primary key (id)) data directory='c:/software';

3、独立表空间下,可以回收表空间碎片(比如一个非常大的delete操作之后释放的空间)

1)创建测试表
DELIMITER //
create procedure pro_test1()
begin
declare i int;
set i=1;
while i<10000 do
    insert into test.test1(id,name) values(i, "aa");
    set i=i+1;
end while;
end;//

##call pro_test1();


表大小:test1.ibd   368KB

2)delete后表大小:
mysql> delete from test1;
test1.ibd   384KB

3)回收表空间
mysql>  alter table test1 engine=innodb; 
test1.ibd    96KB

mysql> select table_name, (data_length+index_length)/1024/1024 as total_mb, table_rows
   from information_schema.tables where table_schema='test' and table_name='TEST1';

+------------+------------+------------+
| table_name | total_mb   | table_rows |
+------------+------------+------------+
| test1      | 0.01562500 |          0 |
+------------+------------+------------+
1 row in set (0.00 sec)


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27126919/viewspace-2126817/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/27126919/viewspace-2126817/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值