MySQL5.6开始可以使用独立表空间, innodb

发布时间:2025-04-07 07:38

1岁半左右,可以开始引导宝宝独立进食 #生活常识# #育儿技巧# #营养均衡#

最新推荐文章于 2024-01-12 15:24:55 发布

cov61598 于 2016-10-20 15:58:12 发布

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/

网址:MySQL5.6开始可以使用独立表空间, innodb https://www.yuejiaxmz.com/news/view/855542

相关内容

创建表时附带的ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE = utf8
MySQL中ENGINE=InnoDB、AUTO
培养孩子独立性,从整理物品开始
【MySQL】MySQL STRAIGHT JOIN 使用案例以及简介
如何学会独立生活?从零开始:你的独立生活指南!
PyMySQL的使用:事务、索引、如何防止SQL注入
MySQL常用优化指南,及大表优化思路(值得收藏)
什么是独立户?揭开独立生活的真相与优势
MySQL大表优化方案
独立开发者访谈

随便看看