Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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
Sql 如何改进CTE查询?_Sql_Postgresql_Common Table Expression - Fatal编程技术网

Sql 如何改进CTE查询?

Sql 如何改进CTE查询?,sql,postgresql,common-table-expression,Sql,Postgresql,Common Table Expression,使用Postgres 9.3.4,我能做些什么来加速这个查询吗。我正在寻找最伟大的版本,它是有向图的一部分,在本例中,一般来说,递归不是快速操作,并且有局限性,因此从提取数据的性能来看,最好预先计算可以预先计算的内容。您还可以从使用临时物理表中获益,这样您就可以在这些表上创建索引,以便更快地提取数据——不过请注意维护索引的开销。但是由于没有关于什么,在哪里,多少的真实信息,除了一般的观察之外,很难给出更多的信息。我一定忘了在临时表上设置索引。当索引位于修订版id上时,我确实可以测量性能增益,至少

使用Postgres 9.3.4,我能做些什么来加速这个查询吗。我正在寻找最伟大的版本,它是有向图的一部分,在本例中,一般来说,递归不是快速操作,并且有局限性,因此从提取数据的性能来看,最好预先计算可以预先计算的内容。您还可以从使用临时物理表中获益,这样您就可以在这些表上创建索引,以便更快地提取数据——不过请注意维护索引的开销。但是由于没有关于什么,在哪里,多少的真实信息,除了一般的观察之外,很难给出更多的信息。我一定忘了在临时表上设置索引。当索引位于修订版id上时,我确实可以测量性能增益,至少对于所选部件而言,填充临时表是昂贵的。我可以想象使用普通not temp表作为缓存,但需要将其与cte结合起来,因为我无法确保缓存被填充。在仍然受益于临时表索引的情况下,这是可能的吗?
WITH RECURSIVE r(depth, revision_id) AS (
  SELECT count(1) AS depth, r.revision_id AS revision_id 
  FROM revision AS r 
  WHERE r.revision_id = 300 
  GROUP BY r.revision_id 
  UNION ALL 
  SELECT rev1.depth + 1, rev2.parent_revision_id AS parent_revision_id 
  FROM rev1, revision AS rev2 
  WHERE rev2.revision_id != 1 AND rev2.revision_id = rev1.revision_id
)
SELECT t1.id AS id, t1.value as value
FROM (
  SELECT DISTINCT ON (t2.id) t2.id AS id, t2.rev_id AS rev_id 
  FROM product AS t2 
  WHERE t2.rev_id = (
    SELECT max(rev_id)
    FROM product
    WHERE t2.id = product.id 
    AND EXISTS (
      SELECT 1 FROM r 
      WHERE r.revision_id = product.rev_id
    )
  ) AND t2.deleted = false 
) AS t1
revision
--------
revision_id, parent_revision_id
1               null
2               1
3               2
4               2
5               3
6               5

product
-------
id, rev_id, value
1    2       a
2    3       b
3    4       c
1    5       a2
1    6       a3
...
    300      a256
id, value
1   a256
2   b