--
:
--
:
--
hugo-teek is loading...
范例-生成数据库表大文件脚本
最后更新于:
范例-生成数据库表大文件脚本-testlog.sql
代码
testlog.sql
1create table testlog (id int auto_increment primary key,name char(10),age int default 20);
2
3delimiter $$
4
5create procedure pro_testlog()
6begin
7declare i int;
8set i = 1;
9while i < 100000
10do insert into testlog(name,age) values (concat('wang',i),i);
11set i = i +1;
12end while;
13end$$
14
15delimiter ;
使用
如下是一个生成大文件表的sql脚本:
testlog.sql
1create table testlog (id int auto_increment primary key,name char(10),age int default 20);
2
3delimiter $$
4
5create procedure pro_testlog()
6begin
7declare i int;
8set i = 1;
9while i < 100000
10do insert into testlog(name,age) values (concat('wang',i),i);
11set i = i +1;
12end while;
13end$$
14
15delimiter ;
将这个代码拷贝到自己数据库里:
1[root@linux-test ~]#mysql -uroot -pxyy520 test
2
3mysql> create table testlog (id int auto_increment primary key,name char(10),age int default 20);
4Query OK, 0 rows affected (0.01 sec)
5
6mysql>
7mysql> delimiter $$
8mysql>
9mysql> create procedure pro_testlog()
10 -> begin
11 -> declare i int;
12 -> set i = 1;
13 -> while i < 100000
14 -> do insert into testlog(name,age) values (concat('wang',i),i);
15 -> set i = i +1;
16 -> end while;
17 -> end$$
18Query OK, 0 rows affected (0.01 sec)
19
20mysql>
21mysql> delimiter ;
22mysql>
查看当前表信息:
1mysql> select *from testlog;
2Empty set (0.00 sec)
3
4[root@linux-test ~]#ll -h /data/mysql/test
5total 1.1M
6……
7-rw-rw---- 1 mysql mysql 8.5K Apr 28 07:19 testlog.frm
8-rw-rw---- 1 mysql mysql 96K Apr 28 07:19 testlog.ibd #这个文件是96K
触发脚本:
1mysql> call pro_testlog;
2Query OK, 1 row affected (16.77 sec)
3
4[root@linux-test ~]#ll -h /data/mysql/test/testlog.ibd
5-rw-rw---- 1 mysql mysql 11M Apr 28 07:21 /data/mysql/test/testlog.ibd
6[root@linux-test ~]#ll -h /data/mysql/test/testlog.ibd
7-rw-rw---- 1 mysql mysql 12M Apr 28 07:21 /data/mysql/test/testlog.ibd
8#可以看到这个testlog.ibd文件已经增大到12M了。
此时直接使用delete from testlog; 命令删除表后,那么这个/data/mysql/test/testlog.ibd文件大小是否会变小呢?
1mysql> delete from testlog;
2Query OK, 99999 rows affected (0.20 sec)
3
4mysql> select *from testlog;
5Empty set (0.00 sec)
6
7mysql>
8
9
10[root@linux-test ~]#ll -h /data/mysql/test/testlog.ibd
11-rw-rw---- 1 mysql mysql 12M Apr 28 07:24 /data/mysql/test/testlog.ibd
12#可以发现这个文件大小依然没有变化。
那么我们可以利用如下命令来清理这种空洞文件:
1mysql> OPTIMIZE TABLE testlog;
2+--------------+----------+----------+-------------------------------------------------------------------+
3| Table | Op | Msg_type | Msg_text |
4+--------------+----------+----------+-------------------------------------------------------------------+
5| test.testlog | optimize | note | Table does not support optimize, doing recreate + analyze instead |
6| test.testlog | optimize | status | OK |
7+--------------+----------+----------+-------------------------------------------------------------------+
82 rows in set (0.01 sec)
9
10##再次验证(符合预期)
11[root@linux-test ~]#ll -h /data/mysql/test/testlog.ibd
12-rw-rw---- 1 mysql mysql 96K Apr 28 07:25 /data/mysql/test/testlog.ibd
当然,truncate命令直接是可以会自动缩减数据文件的大小的。
1| 199997 | wang99998 | 99998 |
2| 199998 | wang99999 | 99999 |
3+--------+-----------+-------+
499999 rows in set (0.04 sec)
5
6mysql> truncate table testlog;
7Query OK, 0 rows affected (0.01 sec)
8
9[root@linux-test ~]#ll -h /data/mysql/test/testlog.ibd
10-rw-rw---- 1 mysql mysql 96K Apr 28 07:26 /data/mysql/test/testlog.ibd
位置
链接:https://pan.baidu.com/s/1-c4nXQki7jMJYl2sCrer7Q?pwd=zt1p
提取码:zt1p
testlog.sql

FAQ
- 直接调用
1MariaDB [hellodb]> call pro_testlog;
2Query OK, 99999 rows affected (12.308 sec) #耗费12s
3
4
5[root@mysql hellodb]# ll -h
6-rw-rw----. 1 mysql mysql 999 Jun 13 06:52 testlog.frm
7-rw-rw----. 1 mysql mysql 12M Jun 13 07:07 testlog.ibd
- 启用事务后,执行会更快些
1MariaDB [hellodb]> begin;
2Query OK, 0 rows affected (0.000 sec)
3
4MariaDB [hellodb]> call pro_testlog;
5Query OK, 99999 rows affected (1.086 sec) #只要1s
6
7MariaDB [hellodb]> commit;
8Query OK, 0 rows affected (0.001 sec)
9
10
11[root@mysql hellodb]# ll -h testlog*
12-rw-rw----. 1 mysql mysql 999 Jun 13 07:27 testlog.frm
13-rw-rw----. 1 mysql mysql 12M Jun 13 07:28 testlog.ibd
📡
👤
作者:
余温Gueen
🌐
版权:
本站文章除特别声明外,均采用
CC BY-NC-SA 4.0
协议,转载请注明来自
余温Gueen Blog!
推荐使用微信支付

推荐使用支付宝
