...仍然没有得到结果试图优化mysql innodb表快速计数

时间:2012-01-06 13:12:33

标签: mysql query-optimization innodb

我刚才发布了这个问题here。我尝试了这些建议并得出结论,我必须做一些根本错误的事情。 我基本上想做的是:

我有一张包含83Mio的表格。时间/价格对。作为索引im使用毫秒精确的unix时间戳,价格范围在1.18775和1.60400之间(十进制精度为5)。 我有一个客户需要在给定的时间间隔内取出价格密度,这意味着我想要花费指定的时间间隔并计算所有不同价格在此区间内出现的次数。 你们这样做怎么样?你会如何设计/索引表格?现在我正在构建一个临时子表,其中只包含给定时间间隔的数据,然后对价格进行计数。有一个更好的方法吗?我的常规数据库设置已经过调整,效果非常好。谢谢你的任何提示!我将尽快提供所需的任何其他信息!

1 个答案:

答案 0 :(得分:0)

鉴于您拥有大量数据及其迅速增长,我倾向于添加第二个表:

price (primary key)
time( some block - also part of PK )
count

执行'重复键更新计数++上的插入'这样的事情。按时间字段对时间字段进行分组(取决于您获得的查询类型.. ms / sec / hour / whatever)。这样你:

 don't have to mess with temp tables - with a table of this size it will write to disk - slow even with SSD
 don't have to touch the initial table every time you want to do your query - might run into locking issues

您必须稍微平衡一下您的数据,但可以预先确定粒度,以尽可能减少问题。