iphone - 在 sqlite3 性能方面有什么更好的 : delete unneeded row or set it as not needed?

标签 iphone ios database performance sqlite

我正在编写一个 iPhone 应用程序,用户可以在其中接收来自不同用户的多条消息。这些消息存储在 sqlite3 数据库中。随着时间的推移,用户可能希望删除从某个用户收到的消息,但可以肯定的是,在删除旧消息后,他会继续收到来自该用户的新消息。

由于检索消息将使用 SELECT 语句完成,因此当用户想要删除消息时,哪种情况更适合使用(就性能而言):

  1. DELETE 正常删除所有旧消息,然后使用如下语句继续检索新消息:SELECT Messages FROM TableName WHERE UserID = (?)
  2. INTEGER 类型的表中添加一个字段,并根据 DELETE 请求将此字段设置为 1,然后使用如下语句检索新消息:SELECT Messages FROM TableName WHERE UserID = (?) AND IsDeleted = 0

还有一件事,如果使用方案 1(正常 DELETE),这会导致磁盘上的数据库文件产生任何碎片吗?

非常感谢。

最佳答案

使用方案 1 更好,因为 SQL 中的 SELECTDELETE 以相同的速度运行,并且方案 1 将使您没有悬垂的元组(不需要的行)在你的数据库中。

如果您希望在任何删除过程后执行数据备份,那么方案 2 是必须的,但您必须考虑到数据库规模的增长会导致 future 性能下降。

最后我想补充一点,对数据库执行删除操作不会导致任何碎片问题,因为大多数数据库的引擎中都有碎片和优化工具。

关于iphone - 在 sqlite3 性能方面有什么更好的 : delete unneeded row or set it as not needed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8883830/

相关文章:

iphone - String to CLLocation经纬度

ios - 提取 iOS 默认图标

iphone - 使用 Objective-C 构建并防止丢失库

java - 当 bean 具有带有 @Formula 注释的属性时,findRowCount 不起作用

iphone - 为什么我的 NSNumber 总是零?

ios swift - 以编程方式更新约束

ios - MPRemoteCommandCenter 在 iOS 中多次调用处理程序

ios - Swift:如何将图像添加到另一个图像?

mysql - 数据查询(通过外键连接)

php - CodeIgniter 中的手动事务