MYSQL表里大量删除数据会造成什么情况?
请教下 MYSQL 聚集索引存储 比如说有个订单表每个月有200万个订单,其中有100个订单为取消支付的状态. 假如我把这100万给删除了, 会不会加快查询的速度,大部分查询都是通过索引来查的,有的要访问90万数据!我想通过索引来查,删除数据的时候也会维护索引,那么通过索引扫描的数量也会减少吧? 通过全主键索引扫描应该不会减少, 删除后会造成主键索引大量的空洞和碎片. 好像索引不会主动合并,只会主动分裂!假如我把这100万给删除了, 会不会加快查询的速度
====
会的 yejr 发表于 2023-8-15 10:48
假如我把这100万给删除了, 会不会加快查询的速度
====
会的
从已有的知识来看删除1/3的数据聚集索引(主键索引 表)的数据不会被清除,只是打个标记,等合适的行便可以重用.
如果是通二级索引访问的话, MYSQL的索引是否也是这样不释放索引页,只是打个标记.访问二级索引效率没有提升,应该通过二级索引 获得主键ID会少一些吧?
对二级索引的范围扫描是否有提升效率? innerDBA 发表于 2023-8-15 15:35
从已有的知识来看删除1/3的数据聚集索引(主键索引 表)的数据不会被清除,只是打个标记,等合适的行便可 ...
从已有的知识来看删除1/3的数据聚集索引(主键索引 表)的数据不会被清除,只是打个标记,等合适的行便可以重用.
===
最终都会被清除,具体可以先了解innodb purge机制 yejr 发表于 2023-8-15 20:04
从已有的知识来看删除1/3的数据聚集索引(主键索引 表)的数据不会被清除,只是打个标记,等合适的行便可 ...
我的公号「老叶茶馆」搜关键字:索引分裂合并 yejr 发表于 2023-8-15 20:05
我的公号「老叶茶馆」搜关键字:索引分裂合并
我看了你的公号, 索引合并 前提是相邻的索引页才可以, 另外条件 容量正好合适!
可现实上很难达到此两种要求, 比如说订单 有成功的,有失败的,还有未支付的.
删除未支付的后,基本上每个页都成了筛子.
MYSQL 有没有指定分区重建索引的呢?
ATER TABLE XXXX PARATION (YYYYY) REBUILDER INDEX `IDX_NAME` ? innerDBA 发表于 2023-8-16 12:01
我看了你的公号, 索引合并 前提是相邻的索引页才可以, 另外条件 容量正好合适!
可现实上很难达到此两种要 ...
1. 逻辑上相邻的两条记录,物理上未必相邻;反过来也成立,逻辑上不相邻的两条记录,物理上可能是相邻的。
2. 不支持rebuild索引,只支持重建整张表,或者删除索引后重新创建。
页:
[1]