栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

SQLite:删除大量行的有效方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SQLite:删除大量行的有效方法

您正在使用具有“大”数据的数据库-即每个blob使用多个页面。

在接近最佳性能的某个时刻,您将达到无法提高的极限。

检查所有选择后,我看到了不同的行为,而不仅仅是不同的算法。

[1]只要您使用一项交易,这个速度就不会太慢。您需要一次执行两项操作,即查询(获取blob大小)和删除。

[2]这是一个好方法。由于两个查询和一个删除都在一个命令中,因此SQLite引擎将进行优化。

[3]这是与以往不同的行为。与相同

DELETe FROM cache WHERe ts < (SELECt ts FROM cache ORDER BYts LIMIT 1 OFFSETcount)
。查询比上一查询便宜,但是我敢打赌删除的行数比上一查询少得多!查询/删除的昂贵部分将被删除!查询优化很重要,但是删除总是会变慢。

[4]这是一个非常糟糕的方法!将所有数据复制到一个新表(可能是另一个数据库)中将非常昂贵。我只能从中得到一个好处:您可以将数据复制到新数据库中,避免使用

VACUUM
,因为新数据库是从基础构建的,而且很干净。

关于

VACUUM
…最糟的
DELETE
VACUUM
。不应在数据库中经常使用真空。我知道该算法应该“清理”您的数据库,但是清理不应是频繁的操作-
数据库已针对选择/插入/删除/更新进行了优化-不能将所有数据保持在最小大小。

DELETE ... IN (SELECT...)
根据预定义的标准,我的选择是使用单个操作。
VACUUM
不会被使用,至少不会经常使用。一个不错的选择是Monitor db size-
当该大小超出限制时,运行假定昂贵的清理操作以修剪数据库。

最后,当使用多个命令时,请不要忘记使用事务!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/402276.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号