【发布时间】:2012-03-05 21:08:43
【问题描述】:
我不是数据库专家,所以问题 =)
如何优化:
select count(DISTINCT userid)
from users
where date_trunc('month',login_date)=date_trunc('month','2012-01-12'::date)
表格行数少于 150 万。我在 login_date 上有一个索引,尽管查询执行时间与没有它时相同。字段 userid 也是主键。
在服务器机器上,这个查询需要超过 2000 毫秒。第一个可以帮助发挥最佳性能的人将获得声誉++:D
----------------a'b'c'd'e'f'g'h' 解决方案-------------- --------------------
CREATE OR REPLACE FUNCTION my_date_trunc_month(some_date DATE)
RETURNS DATE
AS $$
BEGIN
return date_trunc('month',$1);
END;
$$LANGUAGE plpgsql
IMMUTABLE;
CREATE INDEX computedIdx ON gameuser_daily_activity (my_date_trunc_month(login_date));
select count(DISTINCT gameuser_fk) from gameuser_daily_activity where my_date_trunc_month(login_date)=my_date_trunc_month('2012-01-12'::date)
并且需要 110 毫秒 :)
【问题讨论】:
标签: sql postgresql optimization