MYSQL 视图占用物理空间吗?

Vic*_*kel 6 mysql storage view

MYSQL 视图占用物理空间吗?或者换句话说,MYSQL 数据库是否仅限于一定数量的视图?

小智 12

从字面上回答您的问题,是的,在 MySQL 中,视图确实作为磁盘上的已占用空间存在。但他们当然会:如果没有,他们会在哪里存在?如果您重新启动服务器,视图将如何持续存在?

我想你真正的意思是“MySQL 视图是否与它们包含的行数成比例地占用物理空间?”,在这种情况下,答案是否定的,他们没有。

在 MySQL 中,好吧:

视图是存储查询,调用时会生成结果集。视图充当虚拟表。

存储的是查询,而不是结果。

手册中关于视图处理算法的部分对此进行了更多说明:处理视图的正常方法是将视图的定义内联到引用该视图的任何查询中(这称为MERGE算法)。在某些情况下,会使用另一种方法,即单独执行视图的查询,并将结果存储在临时表中,然后针对该表执行引用查询(这称为TEMPTABLE算法)。

MERGE算法从不涉及将视图的结果存储在磁盘上。该TEMPTABLE算法确实如此,但只是暂时的。

视图在其他数据库中的工作方式相同。例如,这就是它们在 PostgreSQL 中的工作方式

然而,一些数据库也支持另一种方法:物化视图。有了这些,视图的查询被提前执行,结果存储在磁盘上。物化视图视图确实按照它们包含的行数成比例地占用物理空间。这会消耗更多空间,需要提前完成工作,并在确保视图是最新的方面引入了很多复杂性(由用户和数据库在不同程度上共享),但可能会提供更快的查询,因为视图的查询所涉及的工作已经完成。Oracle 支持物化视图,并且由来已久。PostgreSQL 目前没有,但会在下一个版本(这将是 9.3)。在没有内置物化视图支持的数据库中,有一些方法可以使用触发器来模拟它们。

  • +1,但要强调`TEMPTABLE` 算法:是的,使用`TEMPTABLE` 时你会暂时消耗空间(内存或磁盘);但这并不占用“视图空间”,而是占用“查询空间”,或者更具体地说,占用连接内存。所以这个内存与查询的数量和类型有关,而不是与视图的数量或类型有关。 (2认同)