14

我对 MySQL 很陌生。我的问题可能有问题,如果是,请更正或解释。

我刚刚通过在 Google 上搜索定义了解了堆表和临时表。 它们之间的确切区别是什么以及两者的实时用途是什么?

根据我的知识或我读过的内容:

堆表:内存中存在的表称为堆表。在 MySql 中创建 HEAP 表时,用户需要将 TYPE 指定为 HEAP。这些表现在更普遍地称为内存表。这些内存表从来没有像“BLOB”或“TEXT”这样的数据类型的值。他们使用使他们更快的索引。

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

4

2 回答 2

17

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

一旦会话断开,临时表就会被删除。

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

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

于 2014-03-17T04:21:01.597 回答
5

MySQL 临时表(临时表指的是同一个东西)是作用于创建它们的会话的表。您可以创建一个与另一个会话中创建的另一个临时表同名的临时表,并且它们不会冲突。每个会话只看到自己的临时表,每个表可能有不同的数据。一旦会话关闭,所有临时表都会被删除,数据也会被删除。

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

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

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

于 2019-11-22T11:41:25.140 回答