MySQL中的堆表和临时表之间的区别?

时间:2013-08-06 07:11:49

标签: mysql heap temp-tables

我是MySQL的新手。我的问题可能是错的,如果请纠正或解释。

我刚刚通过在Google上搜索定义来阅读有关堆表和临时表的内容。 它们之间的确切区别是什么?两者的实际使用时间是什么?

据我所知或我读过的内容:

堆表:内存中存在的表称为HEAP表。在MySql中创建HEAP表时,用户需要将TYPE指定为HEAP。现在,这些表通常称为内存表。这些内存表永远不会有像“BLOB”或“TEXT”这样的数据类型的值。他们使用索引使它们更快。

临时表:在某些情况下,临时表可能非常有用,可以保留临时数据。临时表是当前客户端会话终止时将删除它们。

2 个答案:

答案 0 :(得分:12)

正如您自己引用的那样,临时表仅在会话期间有效,而堆表存在于内存中。 因此,如果不重新启动数据库,堆表可能会存在很长时间。

会话断开后,临时表将被删除。

临时表不在客户端之间共享,堆表是共享的。 因此,对于每个连接,临时表是唯一的,对于第二个连接,另一个连接的临时表不存在。

对于临时表,您需要特殊权限(创建临时表),而堆表只是另一个存储引擎。

答案 1 :(得分:0)

MySQL临时表(临时表指的是同一件事)是范围限于创建它们的会话的表。您可以创建一个与在另一个会话中创建的另一个临时表同名的临时表,它们不会冲突。每个会话仅看到自己的临时表,并且每个表可能具有不同的数据。会话关闭后,所有临时表都会被删除,数据也将被删除。

MySQL还会根据需要为某些类型的查询自动创建临时表。

堆表是指使用MEMORY存储引擎创建的表。 MySQL支持几种以不同方式存储数据的存储引擎。 MEMORY存储引擎不会将任何数据持久保存到磁盘;它在RAM中保存数据。如果MySQL服务器停止,则RAM中的所有数据都会丢失。使用此存储引擎的表也有大小限制。它不能大于max_heap_table_size选项(以字节为单位)。这些表对于高性能,短期访问小型数据集很有用。对于临时表使用MEMORY存储引擎通常很有意义。

视图根本不存储数据。 MySQL视图不是像其他RDBMS产品中那样的“物化”视图。每次查询视图时,您实际上是在视图定义中运行基础查询。尽管对视图的某些使用可能会像某些查询一样自动导致创建临时表。