【发布时间】:2016-09-30 21:45:26
【问题描述】:
表结构:
db_table
id(int)、type(string)、value(decimal)、filter(json编码字符串)、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 秒,并且需要比这快得多。
【问题讨论】:
标签: mysql performance sum range