MySQL-mysql 什么样情况使用临时表,内存表来加快速度?

MySQL-mysql 什么样情况使用临时表,内存表来加快速度?

清晨说ぺ晚安 发布于 2017-08-05 字数 181 浏览 1322 回复 5

临时表,和内存表只知道这些表数据是临时或存在内存中的,并不是持久性的存磁盘的。
在什么样的情况可以利用这俩种类型的表?
还望高手说明下使用的场景以及需要注意那些事项。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

瑾兮 2017-09-15 5 楼

以下是对内存表和临时表之间区别的总结:

内存表:
1. 通过参数控制:max_heap_table_size大小来设定内存表大小
2. 到达max_heap_table_size所设置的内存上限后报错。
3. 表定义保存在磁盘上,数据和索引保存在内存里面。
4. 不能包含TEXT、BLOB等字段。
临时表:
1. 通过参数控制:tmp_table_size大小来设定临时表大小。
2. 到达tmp_table_size上限后会在磁盘上创建临时文件。
3. 表定义和数据都在内存里。
4. 可以包含TEXT, BLOB等字段。

临时表一般都很少用,而且要用也一般是在程序中动态创建或者由MySQL内部根据SQL执行计划需要自己创建。

内存表则大多数是当Cache用,在早期一台机器没有装Memcache等第三方cache时,h内存表无疑是cache的最好的选择了。而如今随着memcache、NoSQL的流行,内存表就越来越少人使用了

泛泛之交 2017-08-30 4 楼

内存表,就是放在内存中的表,所使用内存的大小可通过My.cnf中的max_heap_table_size指定,如max_heap_table_size=1024M,内存表与临时表并不相同,临时表也是存放在内存中,临时表最大所需内存需要通过tmp_table_size = 128M设定。当数据超过临时表的最大值设定时,自动转为磁盘表,此时因需要进行IO操作,性能会大大下降,而内存表不会,内存表满后,会提示数据满错误。
临时表和内存表都可以人工创建,但临时表更多的作用是系统自己创建后,组织数据以提升性能,如子查询,临时表在多个连接之间不能共享。

泛泛之交 2017-08-26 3 楼

游戏每天的排行可以用到内存表

甜柠檬 2017-08-22 2 楼

临时表将在你连接MySQL期间存在。当你断开时,MySQL将自动删除表并释放所用的空间。当然你可以在仍然连接的时候删除表并释放空间。
重起数据库以后,内存中的数据全部丢失。
1.临时表:表建在内存里,数据在内存里
2.内存表:表建在磁盘里,数据在内存里
其中包括2个重要的参数
[mysqld]
内存表容量
max_heap_table_size=1024M
临时表容量
tmp_table_size=1024M

临时表主要是为了放一些中间大结果集的一些子集,内存表可以放一些经常频繁使用的数据。

泛泛之交 2017-08-18 1 楼

1.我结合武侠这个游戏来说一说我的使用心得:
武侠中所有玩家当前所在场景信息存在内存表中,比如A场景有a,b,c玩家, B场景中有e,f,g玩家,都存在一个叫做tbl_player_scene的内存表中。当时并不知道redis, 后来想想其实可以用redis的set来替代。
2.内存表的特点:
a. 支持索引。(这个是对比起redis等nosql的杀手锏)
b. 支持自增长字段。
c. 查询缓存
etc
从内存表的特性来看,他的适合场景有:
a. 在开发初期,内存表在和nosql数据库对比的时候,看查询的复杂程度,数据的复杂程度来进行权衡。
b. 在后期维护中,可以在非常小的改变原先的代码结构,比如dao层的代码,移植成内存表类型。

参考下这篇文章