SQLite事务SQLite插入多条语句为什么这么慢

99次

问题描述:

添加事务

推荐答案

2023-10-24 18:15:36

首先搞清楚在kill掉insert语句后,增大的空间属于那张表空闲空间,还是属于数据库的空闲空间。

这个可以通过查询表存储的相关系统表得到答案,或者看数据库文件空间使用情况也能得到答案(其实如果对存储引擎非常了解的话这个问题的答案是可以直接说出来的,我大概八成确定是后者。因为insert事务回滚了,表空间分配的动作属于同一个事务,自然也回滚了)。

如果是前者,重建该表聚集索引然后再收缩数据库文件。如果是后者直接收缩数据库文件即可。收缩数据库文件有几个选项,不要选truncate only,那样只会收缩文件末尾的自由空间。

重建索引20分钟还没完成,可能你kill掉的那个进程还在回滚,依然在表上加锁。

如果是这样,增大的空间则还在表上,只能等回滚完再说。

另外收缩数据库其实是不推荐的,它本质是把文件中分散的数据页纷纷往文件头的方向挪,然后释放省出来的空间。那么被挪的数据页对应的表的碎片无疑增大了。

知道问答相关问答

(c)2008-2025 自学教育网 All Rights Reserved 汕头市灵创科技有限公司
粤ICP备2024240640号-6