Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 索引条件:(q.query\u id=qpd.query\u id) ->使用单击事实查询id索引进行索引扫描单击事实cf(成本=0.00..1.01行=36宽度=4)(实际时间=0.005..0.022行=6个循环=700803) 索引条件:(cf.query\u id=qpd.query\u id) 筛选器:(cf.type='S'::bpchar)_Postgresql_Query Optimization - Fatal编程技术网

Postgresql 索引条件:(q.query\u id=qpd.query\u id) ->使用单击事实查询id索引进行索引扫描单击事实cf(成本=0.00..1.01行=36宽度=4)(实际时间=0.005..0.022行=6个循环=700803) 索引条件:(cf.query\u id=qpd.query\u id) 筛选器:(cf.type='S'::bpchar)

Postgresql 索引条件:(q.query\u id=qpd.query\u id) ->使用单击事实查询id索引进行索引扫描单击事实cf(成本=0.00..1.01行=36宽度=4)(实际时间=0.005..0.022行=6个循环=700803) 索引条件:(cf.query\u id=qpd.query\u id) 筛选器:(cf.type='S'::bpchar),postgresql,query-optimization,Postgresql,Query Optimization,您可以尝试删除子查询: SELECT COUNT(*) AS count, q.query_str FROM click_fact cf, query q, date_dim dd, queries_p_day_mv qpd WHERE dd.date_dim_id = qpd.date_dim_id AND qpd.query_id = q.query_id AND type = 'S' A

您可以尝试删除子查询:

SELECT COUNT(*) AS count, 
         q.query_str
  FROM click_fact cf, 
       query q,
       date_dim dd,
       queries_p_day_mv qpd
    WHERE dd.date_dim_id = qpd.date_dim_id 
    AND qpd.query_id = q.query_id
    AND type = 'S' 
    AND cf.query_id = q.query_id 
    AND  dd.pg_date BETWEEN '2010-12-29' AND '2011-01-28' 
    AND qpd.interface_id = interface.interface_id
    AND interface.lang = 'sv'
  GROUP BY q.query_str          
  ORDER BY count DESC;
另外,如果接口表很大,在lang上创建ingex可能会有所帮助。查询中的索引\u p\u day\u mv on day\u dim\u id也可能有帮助

通常,首先要尝试的是查找Seq扫描,并尝试通过创建索引使它们成为索引扫描

创建以下索引(除现有索引外):


您可以发布表的定义吗?

我建议使用联接语法而不是sql92样式,然后看看您是否得到相同的计划。我知道这不应该发生,但我有时看到这两种风格在速度上有很大的变化——也许是因为你的意图更清晰也有助于查询优化器?@iain:你能发布一个示例查询,在重写
ANSI
风格时在
PostgreSQL
中更改其计划吗?@Quassinoi-不,因为我没有也不会访问任何我见过的查询。为了公平起见,我在mysql上看到的最多。你将不得不接受这样的轶事:)如果你发布解释分析,而不仅仅是解释输出,那么就更容易找到你的实际问题所在。@magnus谢谢!更新了解释分析。您是否有机会解释您所做的一些优化背后的原因?提前谢谢。
EXPLAIN ANALYZE SELECT COUNT(*) AS count, 
             q.query_str
      FROM click_fact cf, 
           query q,
           date_dim dd,
           queries_p_day_mv qpd
        WHERE dd.date_dim_id = qpd.date_dim_id 
        AND qpd.query_id = q.query_id
        AND type = 'S' 
        AND cf.query_id = q.query_id 
        AND  dd.pg_date BETWEEN '2010-12-29' AND '2011-01-28' 
        AND qpd.interface_id IN (SELECT DISTINCT interface_id from interface WHERE lang = 'sv')
      GROUP BY q.query_str
      ORDER BY count DESC;
                                                                                    QUERY PLAN                                                                                    
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Sort  (cost=19201.06..19220.52 rows=7784 width=12) (actual time=51017.162..51046.102 rows=17586 loops=1)
   Sort Key: (count(*))
   Sort Method:  external merge  Disk: 632kB
   ->  HashAggregate  (cost=18600.67..18697.97 rows=7784 width=12) (actual time=50935.411..50968.678 rows=17586 loops=1)
         ->  Nested Loop  (cost=10.20..18561.75 rows=7784 width=12) (actual time=42.079..43666.404 rows=3868592 loops=1)
               ->  Nested Loop  (cost=10.20..14975.91 rows=2453 width=20) (actual time=23.678..14609.282 rows=700803 loops=1)
                     Join Filter: (qpd.interface_id = interface.interface_id)
                     ->  Unique  (cost=1.03..1.04 rows=1 width=4) (actual time=0.104..0.110 rows=1 loops=1)
                           ->  Sort  (cost=1.03..1.04 rows=1 width=4) (actual time=0.100..0.102 rows=1 loops=1)
                                 Sort Key: interface.interface_id
                                 Sort Method:  quicksort  Memory: 25kB
                                 ->  Seq Scan on interface  (cost=0.00..1.02 rows=1 width=4) (actual time=0.038..0.041 rows=1 loops=1)
                                       Filter: (lang = 'sv'::text)
                     ->  Nested Loop  (cost=9.16..14944.20 rows=2453 width=24) (actual time=23.550..12553.786 rows=700808 loops=1)
                           ->  Hash Join  (cost=9.16..14133.80 rows=2453 width=8) (actual time=18.283..3885.700 rows=700808 loops=1)
                                 Hash Cond: (qpd.date_dim_id = dd.date_dim_id)
                                 ->  Seq Scan on queries_p_day_mv qpd  (cost=0.00..11472.08 rows=700808 width=12) (actual time=0.014..1587.106 rows=700808 loops=1)
                                 ->  Hash  (cost=8.81..8.81 rows=28 width=4) (actual time=18.221..18.221 rows=31 loops=1)
                                       ->  Index Scan using date_dim_pg_date_index on date_dim dd  (cost=0.00..8.81 rows=28 width=4) (actual time=14.388..18.152 rows=31 loops=1)
                                             Index Cond: ((pg_date >= '2010-12-29'::date) AND (pg_date <= '2011-01-28'::date))
                           ->  Index Scan using query_pkey on query q  (cost=0.00..0.32 rows=1 width=16) (actual time=0.005..0.006 rows=1 loops=700808)
                                 Index Cond: (q.query_id = qpd.query_id)
               ->  Index Scan using click_fact_query_id_index on click_fact cf  (cost=0.00..1.01 rows=36 width=4) (actual time=0.005..0.022 rows=6 loops=700803)
                     Index Cond: (cf.query_id = qpd.query_id)
                     Filter: (cf.type = 'S'::bpchar)
SELECT COUNT(*) AS count, 
         q.query_str
  FROM click_fact cf, 
       query q,
       date_dim dd,
       queries_p_day_mv qpd
    WHERE dd.date_dim_id = qpd.date_dim_id 
    AND qpd.query_id = q.query_id
    AND type = 'S' 
    AND cf.query_id = q.query_id 
    AND  dd.pg_date BETWEEN '2010-12-29' AND '2011-01-28' 
    AND qpd.interface_id = interface.interface_id
    AND interface.lang = 'sv'
  GROUP BY q.query_str          
  ORDER BY count DESC;
SELECT  COUNT(*) AS count, 
        q.query_str
FROM    date_dim dd
JOIN    queries_p_date_mv qpd
ON      qpd.date_dim_id = dd.date_dim_id
        AND qpd.interface_id IN
        (
        SELECT  interface_id
        FROM    interface
        WHERE   lang = 'sv'
        )
JOIN    query q
ON      q.query_id = qpd.query_id
JOIN    click_fact cf
ON      cf.query_id = q.query_id 
        AND cf.type = 'S' 
WHERE   dd.pg_date BETWEEN '2010-12-29' AND '2011-01-28' 
GROUP BY
        q.query_str          
ORDER BY
        count DESC
queries_p_date_mv (interface_id, date_dim_id)
interface (lang)
click_fact (query_id, type)