私は SQLクエリを最適化する方法は?別のものは非常に遅いですね?
はどのように最適化すること)=デシベルのspeccialist、それほど問題ではない午前: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 ms: )
Hm、ERROR:インデックス式の関数は、IMMUTABLEとマークする必要があります。 – whatswrong
http://stackoverflow.com/questions/5973030/error-functions-in-index-expression-must-be-marked-immutable - マークを付けた関数を作成します。日付を変換するために不変です。 –
ありがとうございます。 110ミリ秒に最適化!カスタム関数のないソリューションが存在するのを待つかどうか=) – whatswrong