gpt4 book ai didi

mysql - 从大表效率中选择SUM

转载 作者:行者123 更新时间:2023-11-30 22:12:00 28 4
gpt4 key购买 nike

表结构:

数据库表

id (int), type (string), value(decimal), filter(json encoded string), time(int)

其中 type 表示正在存储的指标类型,filter 表示与过滤依据或排序相关的任何键。

假设我想知道客户 100 在两个日期之间的订单销售额。我的表格可能如下所示:

1 , 订单 , 100.00 , {"user":100}, 1464782400

2, 订单, 500.00, {"user":100}, 1464782700

3, 订单, 200.00, {"user":200}, 1464782100

4, 订单, 600.00, {"user":100}, 1464782200

5, 订单, 400.00, {"user":200}, 1464782900

这是我尝试过的许多查询之一,它对我的​​应用程序来说太慢了(该表有超过一百万行):

SELECT SUM(`value`) FROM `db_table` WHERE `time` BETWEEN 1464782100 AND 1464782900 AND `type` = 'order' AND `filter` LIKE '"user":200'

这还不算吧,有什么办法可以提高查询的效率吗?我每次查询最多只需要 0.5 秒,并且需要比这快得多。

最佳答案

INDEX(type, filter, time),
INDEX(type, time)

你说 filter LIKE...;一个简单的 filter =... 会起作用吗?或者您有时会使用通配符吗?如果不需要通配符,第一个索引很好;如果你有通配符,第二个更好

但真正的解决方案是避免运行查询。您的查询闻起来像数据仓库应用程序,并且您正在生成“报告”。为了提高效率,构建并维护一个 Summary table其中包含 typefilter 和日期的每种组合的小计。然后对汇总表运行查询,汇总小计。

关于mysql - 从大表效率中选择SUM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39800514/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com