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

Posted

技术标签:

【中文标题】MySQL中堆表和临时表的区别?【英文标题】:Difference between heap table and temporary table in MySQL? 【发布时间】:2013-08-07 02:03:07 【问题描述】:

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

我实际上认为您为@rashant Shilimkar 的研究添加了很多东西。你不只是重新启动他的信息。【参考方案2】:

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

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

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

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

【讨论】:

以上是关于MySQL中堆表和临时表的区别?的主要内容,如果未能解决你的问题,请参考以下文章

sql server中的用户临时表和全局临时表的区别

SQL Server 表变量和临时表的区别

技术分享 浅谈 MySQL 的临时表和临时文件

MySQL-----临时表

MySQL存储引擎之Memory

MySQL创建临时表?