Hi All,
I have to optimize following query :
SELECT r.TopFamilyID AS FamilyID, FROM CMRules r
WHERE r.WorkspaceID =18512
GROUP BY r.TopFamilyID ;
The explain plan is as follows :I have to optimize following query :
SELECT r.TopFamilyID AS FamilyID, FROM CMRules r
WHERE r.WorkspaceID =18512
GROUP BY r.TopFamilyID ;
Group (cost=509989.19..511518.30 rows=9 width=10) (actual time=1783.102..2362.587 rows=261 loops=1)
-> Sort (cost=509989.19..510753.74 rows=305821 width=10) (actual time=1783.097..2121.378 rows=272211 loops=1)
Sort Key: topfamilyid
-> Bitmap Heap Scan on cmrules r (cost=14501.36..476896.34 rows=305821 width=10) (actual time=51.507..351.487 rows=272211 loops=1)
Recheck Cond: (workspaceid = 18512::numeric)
-> Bitmap Index Scan on pk_ws_fea_fam_cmrules (cost=0.00..14424.90 rows=305821 width=0) (actual time=48.097..48.097 rows=272211 loops=1)
Index Cond: (workspaceid = 18512::numeric)
Total runtime: 2373.008 ms
(8 rows)
-----------------------------------------------------------------------------------------------------------------
\d CMRules gives follows indexes
Indexes:
"pk_ws_fea_fam_cmrules" PRIMARY KEY, btree (workspaceid, featureid, topfamilyid, ruleenddate, gid)
"idx_cmrules" btree (topfamilyid)
"idx_gid_ws_cmrules" btree (gid, workspaceid)
-----------------------------------------------------------------------------------------------------------------
SELECT count(distinct r.TopFamilyID) FROM CMRules r WHERE r.WorkspaceID =18512
Gives me 261 Rows
SELECT count(r.TopFamilyID) FROM CMRules r WHERE r.WorkspaceID =18512 ;
Gives me 272 211 Rows
select count(*) from cmrules;
Gives me 17 643 532 Rows
Please suggest me something to optimize this query
Thanks
Niraj Patel