面试官:mysql 表删除一半数据,表空间会变小吗?

当MySQL表删除一半数据时,表空间并不会立即变小。删除操作只是将数据标记为已删除,实际空间不会被回收。通过重建表(如使用`ALTER TABLE`命令)才能真正回收空间,但这在MySQL 5.5及之前版本中可能导致数据丢失。在线DDL(如MySQL 5.6以后版本)可以在不影响业务的情况下安全进行表重建。
摘要由CSDN通过智能技术生成

这期面试官提的问题是:

MySQL 表删除一半数据,表空间是否会变小?为什么?

我:

你这么问,肯定是不会?但是我不知道为什么(理直气壮.jpg)

国际惯例先上思维导图:

添加图片注释,不超过 140 字(可选)

遇到这种问题先做一波实验,我的思路验证下是否会删除。声明:此次实验采用的 MySQL 版本是 5.7,引擎是 InnDB

往期精彩

MySQL 查询语句是怎么执行的?

MySQL 索引

MySQL 日志

MySQL 事务与 MVCC

MySQL 的锁机制

MySQL 字符串怎么设计索引?

面试官:数据库自增 ID 用完了会咋样?

面试官:order by 怎么优化?

面试官:count (*) 怎么优化?

面试官:explain 应该关注哪些指标?

01 做个实验

首先整一张表结构:订单表 order,主键是 id,另外还有一个索引 index_city 用 city 字段建索引。

 
 

CREATE TABLE `order` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `user_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户编号', `goods_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '商品名称', `order_date` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP COMMENT '下单时间', `city` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '下单城市', `order_num` int(10) NOT NULL COMMENT '订单号数量', PRIMARY KEY (`id`) USING BTREE, INDEX `city_index`(`city`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 2000002 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '商品订单表' ROW_FORMAT = Compact;

1.1 插入数据

造点数据,为了效果。我直接造 200W 条数据,然后直接 delete 删掉一半。

 
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值