MySQL内存表与临时表
关于内存表
创建内存表SQL:
CREATE TABLE tmp_memory (i INT) ENGINE = MEMORY;
1、不同会话创建的临时表,所有会话是共享的。
1、data目录下只有tmp_memory.frm ,表结构放在磁盘上,数据放在内存中
2. mysql 重启或者关闭后内存表里的数据会丢失,但是表结构仍然存在
3. 可以创建索引,删除索引,支持唯一索引
4. 不影响主备,主库上插入的数据,备库也可以查到
5. show tables 看得到表
6、内存表不支持事务。
7、内存表是表锁,当修改频繁时,性能可能会下降。
8、不能包含TEXT,BLOB等字段。
9、内存表满后,会提示数据满错误。
10、所使用内存的大小可通过my.cnf中的max_heap_table_size指定,如max_heap_table_size=1024M
关于临时表
创建临时表SQL:
CREATE TEMPORARY TABLE tmp_table (name VARCHAR(10) NOT NULL,value INTEGER NOT NULL);
1. 不同会话创建的临时表仅限本会话使用,对其他会话是不可见的。
2. 表结构和数据都放在内存中
3. 会话消失表结构和数据都消失
4. 可以创建索引,删除索引
5. 主库创建的表,备库查不到,
6. show tables 看不到表
7、当数据超过临时表的最大值设定时,自动转为磁盘表,此时因需要进行IO操作,性能会大大下降。
8、最大所需内存需要通过tmp_table_size=1024M设定。
临时表和内存表都可以人工创建,但 临时表更多的作用是系统自己创建后,组织数据以提升性能,如子查询。
临时表和内存表的ENGINE 不同,临时表默认的是MyISAM,而内存表是MEMORY
已有 0 人发表留言,猛击->> 这里<<-参与讨论
ITeye推荐