相关疑难解决方法(0)

如何防止Postgres内联子查询?

这是对Postgres 9.1.6的慢查询,即使最大计数为2,两行已经由主键标识:(4.5秒)

EXPLAIN ANALYZE SELECT COUNT(*) FROM tbl WHERE id IN ('6d48fc431d21', 'd9e659e756ad') AND data ? 'building_floorspace' AND data ?| ARRAY['elec_mean_monthly_use', 'gas_mean_monthly_use'];
                                                                     QUERY PLAN                                                                     
----------------------------------------------------------------------------------------------------------------------------------------------------
 Aggregate  (cost=4.09..4.09 rows=1 width=0) (actual time=4457.886..4457.887 rows=1 loops=1)
   ->  Index Scan using idx_tbl_on_data_gist on tbl  (cost=0.00..4.09 rows=1 width=0) (actual time=4457.880..4457.880 rows=0 loops=1)
         Index Cond: ((data ? 'building_floorspace'::text) AND (data ?| '{elec_mean_monthly_use,gas_mean_monthly_use}'::text[]))
         Filter: ((id)::text = ANY ('{6d48fc431d21,d9e659e756ad}'::text[]))
 Total runtime: 4457.948 ms
(5 rows)
Run Code Online (Sandbox Code Playgroud)

嗯,也许如果我先用主键部分做一个子查询... :(不,仍然是4.5秒以上)

EXPLAIN ANALYZE SELECT COUNT(*) FROM (  SELECT * FROM tbl WHERE …
Run Code Online (Sandbox Code Playgroud)

postgresql indexing subquery inlining

8
推荐指数
2
解决办法
2883
查看次数

标签 统计

indexing ×1

inlining ×1

postgresql ×1

subquery ×1