Home >Database >Mysql Tutorial >MySQL 中的临时表和内存表

MySQL 中的临时表和内存表

WBOY
WBOYOriginal
2016-06-07 16:08:291091browse

MySQL内存表: 1、通过My.cnf中的max_heap_table_size指定,支持动态指定 2、表定义是存放在磁盘上的,扩展名为.frm,重启不会丢

MySQL内存表:

1、通过My.cnf中的max_heap_table_size指定,,支持动态指定

2、表定义是存放在磁盘上的,扩展名为.frm,重启不会丢失,数据是存放在内存中的,所以重启会丢失数据

3、不支持BLOB或TEXT列

4、内存表初始化,可以使用--init-file来初始化,避免重启mysql后数据被清空。比如--init-file="/data/mysql/init.sql", init.sql格式为:

use db_test;

select *** into m_table;

5、在数据库复制时,如果主机当掉,则会在下次对主库访问的临时表访问时对binLog自动加入delete from [内存表],将slave的数据也删除掉,以保证两边的数据一致性。

6、内存表不支持事务。

7、内存表是表锁,当修改频繁时,性能可能会下降。

8、对于重启造成的数据丢失,有以下的解决办法:

1、在任何查询之前,执行一次简单的查询,判断heap表是否存在数据,如果不存在,则把数据重新写入,或者DROP表重新复制某张表。这需要多做一次查询。不过可以写成include文件,在需要用该heap表的页面随时调用,比较方便。

2、对于需要该heap表的页面,在该页面第一次且仅在第一次查询该表时,对数据集结果进行判断,如果结果为空,则需要重新写入数据。这样可以节省一次查询。

3、更好的办法是在mysql每次重新启动时自动写入数据到heap,但是需要配置服务器,过程比较复杂,通用性受到限制。

MySQL临时表:

1、临时表最大所需内存需要通过tmp_table_size设定,实际最大内存由max_heap_table_size和tmp_table_size的最小值决定,tmp_table_size对每个线程分配

2、如果内存临时表超出了限制,MySQL就会自动地把它转化为基于磁盘的MyISAM表,存储在指定的tmpdir目录下

3、Created_tmp_disk_tables 和 Created_tmp_tables 可以看出临时表和磁盘创建的数量,一般Created_tmp_disk_tables/Created_tmp_tables

4、create temporary table tmp1(id int not null); 可以创建临时表

本文永久更新链接地址:

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn