代码之家  ›  专栏  ›  技术社区  ›  Tobias Hermann

在一个查询中更新多个计数器

  •  1
  • Tobias Hermann  · 技术社区  · 6 年前

    我的应用程序当前执行以下操作(最简单的示例):

    UPDATE counts SET count = count + 1 WHERE id = 1
    UPDATE counts SET count = count + 1 WHERE id = 2
    UPDATE counts SET count = count + 1 WHERE id = 2
    UPDATE counts SET count = count + 1 WHERE id = 3
    UPDATE counts SET count = count + 1 WHERE id = 3
    

    但是,每秒有几千次更新,而且在峰值流量时速度太慢。

    所以我想通过合并这些语句来加快速度。当然,以下方法不起作用:

    UPDATE counts SET count = count + 1 WHERE id IN (1, 2, 2, 3, 3)
    

    这个 count 第页,共页 2 3

    我是否必须手动将其拆分为以下内容:

    UPDATE counts SET count = count + 1 WHERE id IN (1, 2, 3)
    UPDATE counts SET count = count + 1 WHERE id IN (2, 3)
    

    还是有更聪明的方法直接在语句中实现呢?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Valerie Parham-Thompson    6 年前

    您可以使用1以外的其他数字来添加计数(在功能上,你可以;您必须测试性能。)

    cqlsh> UPDATE mykeyspace.counts SET count = count + 1 where k1=1;
    cqlsh> UPDATE mykeyspace.counts SET count = count + 1 where k1=2;
    cqlsh> UPDATE mykeyspace.counts SET count = count + 1 where k1=3;
    cqlsh> select * from mykeyspace.counts ;
    
     k1 | count
    ----+-------
      1 |     1
      2 |     1
      3 |     1
    
    (3 rows)
    cqlsh> UPDATE mykeyspace.counts SET count = count + 57 where k1=1;
    cqlsh> select * from mykeyspace.counts ;
    
     k1 | count
    ----+-------
      1 |    58
      2 |     1
      3 |     1
    
    (3 rows)
    cqlsh> UPDATE mykeyspace.counts SET count = count + 65 where k1 in (2,3);
    cqlsh> select * from mykeyspace.counts ;
    
     k1 | count
    ----+-------
      1 |    58
      2 |    66
      3 |    66