V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
ysy950803
V2EX  ›  Android

SQLite 在大量数据的情况下如何优化查询?

  •  1
     
  •   ysy950803 · Nov 6, 2024 · 7684 views
    This topic created in 538 days ago, the information mentioned may be changed or developed.

    最近遇到移动端数据库的性能瓶颈问题了。

    我们的应用主要依赖于谷歌官方的 Room 框架,用了 Kotlin 的 Flow 来实现响应式数据流,由于项目比较新,各种依赖库都是最新的。

    有用户积累了 2 万多条数据,在中低端手机上,查一次要好几秒,由于建立了数据库索引,插入的速度也很慢,插一条数据也要等好多秒。应用有查全部数据的需求(包括一些全局统计信息等等),所以不想每次用户查全部数据都加 loading 之类的弹窗,体验会很不好。

    是否有办法优化 SQLite 数据库的读写速度呢?感觉依赖于 Room 后,开发者能做的很少。

    16 replies    2024-11-15 17:49:07 +08:00
    minibear2021
        1
    minibear2021  
       Nov 6, 2024
    sqlite 处理 2 万条数据应该是小 case 吧,会不会瓶颈不在数据库这里?
    ltmst
        2
    ltmst  
       Nov 6, 2024
    2w 条对 sqlite 小意思了,应该是业务或者操作的问题
    我印象中批量写的时候,一定要用事务操作,同一个事务只有一次 io
    NoOneNoBody
        3
    NoOneNoBody  
       Nov 6, 2024
    插入为什么要等?插入不影响后续工作啊
    iyiluo
        4
    iyiluo  
       Nov 6, 2024
    才 2w 条,怎么可能瓶颈了,微信用的也是 SQLite ,十几 G 的数据查起来挺快的
    caola
        5
    caola  
       Nov 6, 2024
    不太可能是 sqlite 问题。多进程读取是没问题,但多进程写入之前有其他的操作没有释放就会导致问题
    ursash
        6
    ursash  
       Nov 6, 2024
    ducked?
    ursash
        7
    ursash  
       Nov 6, 2024
    打错了。。duckdb
    icy37785
        8
    icy37785  
       Nov 7, 2024 via iPhone
    才两万条数据,离 sqlite 的瓶颈差的远。感觉你应该在其他地方找问题。
    iX8NEGGn
        9
    iX8NEGGn  
       Nov 7, 2024 via iPhone
    sqlite 强得很,有索引两亿条都不至于几秒,找找别的原因
    gogogo2000
        10
    gogogo2000  
       Nov 7, 2024
    sqlite 的性能在有索引的情况下,最少也要百万级别才能感受到性能衰减,你这个 2w 根本不值一提
    ysy950803
        11
    ysy950803  
    OP
       Nov 7, 2024
    @NoOneNoBody 考虑过放到后台去执行,但是怕用户杀进程,插入就会失败。
    ysy950803
        12
    ysy950803  
    OP
       Nov 7, 2024
    谢谢大家回复,确实单纯从查询来看,查全表耗时在 1s 内,但是我们数据遍历处理又花了一两秒,所以每次用户在 UI 上切换“非全部(比如某年某月)”和“全部”数据时,还是能感觉到明显的等待过程,数据不能立即渲染到 UI 上。
    815979670
        13
    815979670  
       Nov 7, 2024
    SQlite 性能很快的 @ysy950803 看了 12 楼的回复 可以考虑将一部分处理的逻辑放到 SQLite 查询时处理 应该能节省遍历的过程?
    shyangs
        14
    shyangs  
       Nov 7, 2024
    「全部」資料直接 cache 第一頁,這樣非全部(某年某月)切回「全部」時是從 cache 或記憶體捉出來,而不是從低端機的 emmc 出來.
    zhanlanhuizhang
        15
    zhanlanhuizhang  
       Nov 8, 2024
    2 万数据,应该不是 sqlite 的问题。我公司的应用,500 百万的数据,查询都很快。
    ysy950803
        16
    ysy950803  
    OP
       Nov 15, 2024
    @shyangs 是的,现在做了分页。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   989 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 19:32 · PVG 03:32 · LAX 12:32 · JFK 15:32
    ♥ Do have faith in what you're doing.