mysql如何使用临时表,内存表来加快速度?

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层的代码,移植成内存表类型。

linux_ubuntu

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

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

自由者:

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

内存表:
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的流行,内存表就越来越少人使用了

    原文作者:刘天一
    原文地址: https://zhuanlan.zhihu.com/p/19609168
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞