SQL解释计划:什么是Materialize?

问题描述 投票:37回答:4

我问PostgreSQL解释我的查询。部分解释是:

table_name --> Materialize

具体化是做什么的?我正在加入两张桌子,而不是观看或类似的东西。

sql postgresql sql-execution-plan
4个回答
53
投票

具体化节点意味着在执行上层节点之前,树中的任何低于它的输出(可以是扫描,或者一组完整的连接或类似的东西)被内置到存储器中。这通常在外部节点需要可以由于某种原因而重新扫描的源时完成。

因此,在您的情况下,计划程序确定您的一个表上的扫描结果将适合内存,并且直到可以选择需要重新扫描的上部联接操作,同时仍然更便宜。


7
投票

这意味着它不能使用任何索引(或类似方法)来使连接高效,因此最后一种方法是将其中一个表的结果具体化,以便在与另一个表连接时使用较小的集合。


1
投票

在merge join和嵌套循环连接中,数据库将“重新扫描”内部循环。基本上像:

for each row in outer table:
    for each row in inner table:
        # do something

规划器将实现内部循环表,这意味着将整个表加载到内存缓冲区中,以避免昂贵的磁盘IO成本。

一个有用的link


0
投票

我们可以说Materialize命令将创建一个View of a table(就像虚拟表或内存中的表的SnapShot

它用于通过在更具信息性的上下文中呈现数据来增强数据的可见性,并通过隐藏不需要查看/不向我们注意的用户的关键或敏感数据来控制对数据的访问。展示下。

使用Materialise / Snap-Shot的主要好处是可以降低之后对该表的查询成本。在执行计划中,相同的状态表明,如果我们使用materialise,那么我们可以获取多少好处,而不使用它时!

Explain to check execution plan

->  Materialize  (cost=0.29..8.51 rows=10 width=244)
         ->  Index Scan using tenk2_unique2 on tenk2 t2  (cost=0.29..8.46 rows=10 width=244)
               Index Cond: (unique2 < 10)

我忽略了这个-->,因为在我的知识中没有这样的算子,加上 - 之后会评论表达式,我假设你只是意味着这个->

我希望这有帮助..

© www.soinside.com 2019 - 2024. All rights reserved.