码迷,mamicode.com
首页 > 数据库 > 详细

MySQL 中的临时表和内存表

时间:2015-02-24 23:32:38      阅读:220      评论:0      收藏:0      [点我收藏+]

标签: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,但是需要配置服务器,过程比较复杂,通用性受到限制。


临时表:

     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<5%

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


本文出自 “郑鸿健的BLOG” 博客,请务必保留此出处http://tenry.blog.51cto.com/9937729/1615082

MySQL 中的临时表和内存表

标签:mysql 临时表 内存表

原文地址:http://tenry.blog.51cto.com/9937729/1615082

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!