GreatSQL社区

搜索

[已解决] MYSQL表里大量删除数据会造成什么情况?

959 6 2023-8-15 10:37
请教下 MYSQL 聚集索引存储 比如说有个订单表每个月有200万个订单,其中有100个订单为取消支付的状态. 假如我把这100万给删除了, 会不会加快查询的速度,  大部分查询都是通过索引来查的,有的要访问90万数据!  我想通过索引来查,删除数据的时候也会维护索引,那么通过索引扫描的数量也会减少吧? 通过全主键索引扫描应该不会减少, 删除后会造成主键索引大量的空洞和碎片. 好像索引不会主动合并,只会主动分裂!
全部回复(6)
yejr 2023-8-15 10:48:04
假如我把这100万给删除了, 会不会加快查询的速度
====
会的
innerDBA 2023-8-15 15:35:29
yejr 发表于 2023-8-15 10:48
假如我把这100万给删除了, 会不会加快查询的速度
====
会的

从已有的知识来看  删除1/3的数据  聚集索引(主键索引 表)的数据不会被清除,只是打个标记,等合适的行便可以重用.
如果是通二级索引访问的话, MYSQL的索引是否也是这样不释放索引页,只是打个标记.  访问二级索引效率没有提升,应该通过二级索引 获得主键ID会少一些吧?
对二级索引的范围扫描是否有提升效率?
INNER_JOIN
yejr 2023-8-15 20:04:42
innerDBA 发表于 2023-8-15 15:35
从已有的知识来看  删除1/3的数据  聚集索引(主键索引 表)的数据不会被清除,只是打个标记,等合适的行便可 ...

从已有的知识来看  删除1/3的数据  聚集索引(主键索引 表)的数据不会被清除,只是打个标记,等合适的行便可以重用.
===
最终都会被清除,具体可以先了解innodb purge机制
yejr 2023-8-15 20:05:16
yejr 发表于 2023-8-15 20:04
从已有的知识来看  删除1/3的数据  聚集索引(主键索引 表)的数据不会被清除,只是打个标记,等合适的行便可 ...

我的公号「老叶茶馆」搜关键字:索引分裂合并
innerDBA 2023-8-16 12:01:05
yejr 发表于 2023-8-15 20:05
我的公号「老叶茶馆」搜关键字:索引分裂合并

我看了你的公号, 索引合并 前提是相邻的索引页才可以, 另外条件 容量正好合适!
可现实上很难达到此两种要求, 比如说订单 有成功的,有失败的,还有未支付的.
删除未支付的后,基本上每个页都成了筛子.
MYSQL 有没有指定分区重建索引的呢?
ATER TABLE XXXX PARATION (YYYYY) REBUILDER INDEX `IDX_NAME` ?
INNER_JOIN
yejr 2023-8-16 14:52:49
innerDBA 发表于 2023-8-16 12:01
我看了你的公号, 索引合并 前提是相邻的索引页才可以, 另外条件 容量正好合适!
可现实上很难达到此两种要 ...

1. 逻辑上相邻的两条记录,物理上未必相邻;反过来也成立,逻辑上不相邻的两条记录,物理上可能是相邻的。
2. 不支持rebuild索引,只支持重建整张表,或者删除索引后重新创建。
innerDBA

12

主题

0

博客

62

贡献

注册会员

Rank: 2

积分
93

助人为乐(铜)勤学好问(铜)

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2025-1-18 15:52 , Processed in 0.018780 second(s), 15 queries , Redis On.
快速回复 返回顶部 返回列表