美文网首页iOS技术点iOS SDK 开发tom
sqlite 操作速度优化浅谈

sqlite 操作速度优化浅谈

作者: YxxxHao | 来源:发表于2017-02-10 15:57 被阅读455次

最近开发的SDK因为需要大量的数据库读写操作,所以尝试对数据库操作的速度进行优化,从java转到iOS,发现最明显的变化就是和数据库的接触变少了,在iOS中使用数据库时基本都是最简单的增删改查,偶尔还加个索引什么的,其实在移动端很少存在太大量的数据库操作,这也是不同平台有不同特点。

拼命回想起大学学过的那些数据基础知识,能想到的数据库操作速度优化的处理有:事务、存储过程、索引(查询速度),心酸ing,感觉学过的东西都还给老师了,然后再查了一下资源,发现还有一个是写同步的操作。

开启事务

事务是什么,这里就不详细说了,一句话总结下:要么全部执行,要么全部不执行。这里需要注意的是,sqlite里的sqlite3_exec()方法中,其实是隐式开启了事务了,相当于一条sql语句的事务,每执行一次sqlite3_exec()方法就打开和关闭一次事务,这样就大大的增加IO了。所以当操作批量数据的时候,我显式开启事务,等执行完了再关闭事务,这样就可以大量减少IO了。下面以举个例子(这里全部通过FMDB来操作sqlite):

[currentDataBase beginTransaction];
BOOL isRollBack = NO;
@try {
    // 批量数据库操作 
} @catch (NSException *exception) {
    isRollBack = YES;
    // 数据操作异常,全部回滚
    [currentDataBase rollback];
} @finally {
    if (!isRollBack) {
        // 提交并关闭事务
        [currentDataBase commit];
    }
}

这里进入FMDB的源码来看下, 相信FMDB源码对大家来说都能读得懂:

- (BOOL)rollback {
    BOOL b = [self executeUpdate:@"rollback transaction"];
    if (b) {
        _inTransaction = NO;
    }
    return b;
}

- (BOOL)commit {
    BOOL b =  [self executeUpdate:@"commit transaction"]; 
    if (b) {
        _inTransaction = NO;
    }
    return b;
}

- (BOOL)beginTransaction {   
    BOOL b = [self executeUpdate:@"begin exclusive transaction"];
    if (b) {
        _inTransaction = YES;
    }
    return b;
}

其实就是把sqlite的操作封装起来,给用户提供更快捷方便的接口罢了,建议大家在第三方的轮子时,还是看下别人怎么实现的,顺便也围观学习下。

存储过程

存储过程,也来一句话总结:把sql编译存储好了,使用时直接执行,不需要重新编译。基础知识网上一大堆,不懂自行搜索去。

在sqlite里是通过 sqlite3_prepare_v2() 方法来编译sql的,这里直接看FMDB的执行sql的方法的源码就好(因为源码中这个方法代码有点小多,截关键代码的图):

图片.png

这里看标出的关键代码,fmdb已经帮我们封装好存储过程的代码,我们只要把shouldCacheStatements设置true就可以开启存储过程了,这里就不再深入看FMDB的代码了,有兴趣的可以深入阅读。

关闭写同步

关闭写同步的时候,应用异常退出时可能导致数据的丢失,这个在移动应用出现异常的概率还是比较大的,直接kill应用等,都有可能导致数据丢失,这里就不细说了,有兴趣的自己去搜索相关的内容看看。

总结

总结就是索引不介绍,哈哈,欢迎来吐槽,SDK 开发群:127548419。 还有SDK 开发可以尝试使用NoSQL,下次分享下realm。

相关文章

  • FMDB 大量数据操作 卡顿优化

    参考 :sqlite 操作速度优化浅谈iOS 提升SQLite数据插入效率低、速度慢的方法

  • sqlite 操作速度优化浅谈

    最近开发的SDK因为需要大量的数据库读写操作,所以尝试对数据库操作的速度进行优化,从java转到iOS,发现最明显...

  • iOS端sqlite3 的线程安全

    sqlite3 多线程和锁 ,优化插入速度及性能优化这篇博客,着重介绍了sqlite3 多线程和锁。这里针对iOS...

  • Sqlite 操作优化

    在写项目的时候会经常接触 Sqlite ,比如说写课程表相关的东西,虽然数据不是很多,但是还是可以感觉到短暂的卡顿...

  • Android性能优化

    启动速度优化 在Application的onCreate或attachBaseContext执行了太多耗时的操作。...

  • ios Sqlite 学习

    FMDB 学习ios的应该都用过FMDB ,那么FMDB是如何优化我们的数据库操作的勒,手动实践下sqlite 封...

  • ios Sqlite 学习

    # FMDB 学习ios的应该都用过FMDB ,那么FMDB是如何优化我们的数据库操作的勒,手动实践下sqlite...

  • Sqlite 使用笔记

    1. 数据库基本操作封装 sqlite 数据操作 语句类型 sqlite 数据库的简单实用- 导入sqlite3数...

  • 关于iOS数据库大数据量的优化策略

    前言: 对于目前的iOS应用,大的数据量操作是一个不可避免的问题,本文仅对sqlite数据库大数据量操作进行优化策...

  • SQLite

    SQLite 基础知识 SQLite 列操作 sqlite中不支持删除列的操作,也不能够修改主键。 从上图可见,S...

网友评论

    本文标题:sqlite 操作速度优化浅谈

    本文链接:https://www.haomeiwen.com/subject/tqwgittx.html