QBugHunter
V2EX  ›  数据库

Sqlite3 如何更好的获得表行数

  •  
  •   QBugHunter · Mar 19, 2021 · 2051 views
    This topic created in 1906 days ago, the information mentioned may be changed or developed.
    SELECT count(DeviceName) FROM AllDevice;
    

    有没有更有效的办法,现在可能需要比较频繁的获得一张表的行数,表是 1-10 亿条数据,但只在最后 10 条频繁的添加或删除。

    也就是这张表,加 3-5 条数据,然后删除 7 到 8 条数据,操作比较频繁,但也有偶发,比较大的删除或添加

    现在需要比较频繁的去查询这张表的行数,有没有更好的办法

    7 replies    2021-03-20 13:59:22 +08:00
    faust24601
        1
    faust24601  
       Mar 19, 2021 via iPhone
    加一个表存数量字段,增删的时候更新这个字段
    RRRoger
        2
    RRRoger  
       Mar 19, 2021   ❤️ 1
    新建一张表记录这个 count 的动态变化;

    先初始化创建一条数据, +M (当前表行数)

    每次发生添加删减的时候, 创建一条记录 +N or -N

    最后对这个列求和

    不知道可行不可行
    Kilerd
        3
    Kilerd  
       Mar 19, 2021
    先读一次出来放在 redis,然后每次修改的地方都做 INC DEC 的操作,然后定时刷新一次就可以了。
    andy2415
        4
    andy2415  
       Mar 19, 2021
    缓存一个变量 每次增删维护一下变量值
    xupefei
        5
    xupefei  
       Mar 19, 2021 via iPhone
    有个邪道是 partition by DeviceName,然后 count 就会依赖 column metadata 进行计数。
    不过 sqlite 有没有这些 metadata 我不知道…
    codehz
        6
    codehz  
       Mar 19, 2021 via Android
    (提供个思路,没测试过性能表现)
    用触发器去更新另一个表的字段。。。根据插入和删除自动维护
    不确定会对插入性能造成多少影响)
    bthulu
        7
    bthulu  
       Mar 20, 2021
    触发器啊
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   6142 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 02:54 · PVG 10:54 · LAX 19:54 · JFK 22:54
    ♥ Do have faith in what you're doing.