我在下面的字段中存储了对mysql表中的各种rpc调用的响应: Table: rpc_responses timestamp (date) method (varchar) id (varchar) response (mediumtext) PRIMARY KEY(timestamp,method,id) selectmethod和id所有现有组合的最新答案的最佳方法是什么? 对于每个date,对于给定的方法/ ID只能有一个响应。 并非所有的通话组合都必须在给定的date。 有几十种方法,数以千计的ID和至less365个不同的date 示例数据: timestamp method id response 2009-01-10 getThud 16 "….." 2009-01-10 getFoo 12 "….." 2009-01-10 getBar 12 "….." 2009-01-11 getFoo 12 "….." 2009-01-11 getBar 16 "….." 预期结果: 2009-01-10 getThud 16 "….." 2009-01-10 getBar 12 "….." 2009-01-11 getFoo 12 […]
我在Postgres 9.2中有下面的表格(简化forms) CREATE TABLE user_msg_log ( aggr_date DATE, user_id INTEGER, running_total INTEGER ); 它每个用户和每天最多包含一条logging。 300天内每天将会有大约50万条logging。 每个用户的running_total总是在增加。 我想在特定date之前有效地检索每个用户的最新logging。 我的查询是: SELECT user_id, max(aggr_date), max(running_total) FROM user_msg_log WHERE aggr_date <= :mydate GROUP BY user_id 这是非常缓慢的。 我也试过了: SELECT DISTINCT ON(user_id), aggr_date, running_total FROM user_msg_log WHERE aggr_date <= :mydate ORDER BY user_id, aggr_date DESC; 它有相同的计划,同样缓慢。 到目前为止,我在user_msg_log(aggr_date)上有一个索引,但没有多大帮助。 有没有其他的指标,我应该用来加快这一点,或者任何其他方式来实现我想要的?