2017-03-07 16 views
0

私は単純なクエリ持っている:それは大体とるマテリアライズド・ビューは期待どおりに機能しませんか?

select * from tags where tags.taggable_type = 'Skill'; 

を:

Seq Scan on tags (cost=0.00..378.81 rows=11775 width=77) (actual time=0.019..7.092 rows=11775 loops=1) 
    Filter: ((taggable_type)::text = 'Skill'::text) 
    Rows Removed by Filter: 4610 
    Planning time: 0.098 ms 
    Execution time: 8.536 ms 
(5 rows) 

これらのレコードを取得するには。私が取得するための時間が大幅に減少するであろうことを期待して、マテリアライズド・ビューを作成したが、マットのクエリを実行するときに、現実には、私はこれを得た:

explain analyze select * from skill_matview; 

Seq Scan on skill_matview (cost=0.00..239.75 rows=11775 width=76) (actual time=0.078..5.481 rows=11775 loops=1) 
    Planning time: 1.562 ms 
    Execution time: 6.900 ms 
(3 rows) 

私は何かが足りない、私の周り見て、すべてがかなり良い自慢され続けますクエリの削減時間が、私はここでそれを見ていないよ。

編集:あなたのケースでは、マテリアライズド・ビューを得るために、あまりありません

CREATE MATERIALIZED VIEW skill_matview AS select * from tags where tags.taggable_type = 'Skill'; 
+0

あなたは素材ビューの作成方法を追加できます –

+0

投稿を編集して投稿を編集しました – Rogue

答えて

2

元のクエリは16385行全体をスキャンする必要があり、WHERE条件では4610個だけ削除されます。

したがって、マテリアライズド・ビューは表の約4分の3になります。その順次スキャンでは、およそ3分の2の時間がかかります。

さらに、9ミリ秒はそれほど悪くないですね。

+0

答えをありがとう。私はそのクエリ時間を短縮することができる他の方法はありますか? – Rogue

+0

11K行は7msで、まだ速度を上げたいですか?おそらく、11Kレコードを取得する必要がないような方法でデータモデルを変更してください。 – wildplasser

+0

@Rogue以下6.900 ms?私はそれを非常に疑う。ハードウェアのアップグレードはいつでも可能ですが、「すべて」の行が必要な場合は順次スキャンを実行することは決してありません。一度にすべての* 11775 *行が必要ですか? – pozs

関連する問題