Heim  >  Artikel  >  Datenbank  >  mysql内存表、临时表

mysql内存表、临时表

WBOY
WBOYOriginal
2016-06-07 15:33:281152Durchsuche

内存表,就是放在内存中的表,所使用内存的大小可通过My.cnf中的max_heap_table_size指定,如max_heap_table_size=1024M,内存表与临时表并不相同,临时表也是存放在内存中,临时表最大所需内存需要通过tmp_table_size = 128M设定。当数据超过临时表的最大设

        内存表,就是放在内存中的表,所使用内存的大小可通过My.cnf中的max_heap_table_size指定,如max_heap_table_size=1024M,内存表与临时表并不相同,临时表也是存放在内存中,临时表最大所需内存需要通过tmp_table_size = 128M设定。当数据超过临时表的最大值设定时,自动转为磁盘表,此时因需要进行IO操作,性能会大大下降,而内存表不会,内存表满后,会提示数据满错误。


1、内存表定义:

create table test
(
	id int unsigned not null auto_increment primary key,
	state char(10),
	type char(20),
	date char(30)
)ENGINE=MEMORY DEFAULT CHARSET=utf8;

2、内存表特点:

  1. 内存表的表定义是存放在磁盘上的,扩展名为.frm, 所以重启不会丢失。
  2. 内存表的数据是存放在内存中的,所以重启会丢失数据。
  3. 内存表使用一个固定的记录长度格式。
  4. 内存表不支持BLOB或TEXT列,比如varchar与text字段就不会被支持。
  5. 内存表支持AUTO_INCREMENT列和对可包含NULL值的列的索引(网上大多说不支持,这是错误的)。内存表支持大于(>) 小于( 
  6. mysql重启后,主键、自增、索引仍然存在,只是数据丢失。这也是对网上的一些错误文字纠正。
  7. 内存表表在所有客户端之间共享(就像其它任何非TEMPORARY表)。
  8. MEMORY存储引擎执行HASH和BTREE索引。你可以通过添加一个如下所示的USING子句为给定的索引指定一个或另一个:
    CREATE TABLE lookup
    (id INT, INDEX USING HASH (id))
    ENGINE = MEMORY;
    
    CREATE TABLE lookup
    (id INT, INDEX USING BTREE (id))
    ENGINE = MEMORY;

  9. 内存表初始化,可以使用--init-file来初始化,避免重启mysql后数据被清空。比如--init-file="/data/mysql/init.sql", init.sql格式为:
    use db_test;
    select *** into m_table;
    

  10. 在数据库复制时,如果主机当掉,则会在binLog中自动加入delete from [内存表],将slave的数据也删除掉,以保证两边的数据一致性。
  11. 内存表不支持事务。
  12. 内存表是表锁,当修改频繁时,性能可能会下降。
3、总结:

1. 多个session,创建表的名字不能一样
2. 一个session创建会话后,对其他session也是可见的
3. data目录下只有tmp_memory.frm ,表结构放在磁盘上,数据放在内存中
4. mysql 重启或者关闭后内存表里的数据会丢失,但是表结构仍然存在
5. 可以创建索引,删除索引,支持唯一索引
6. 不影响主备,主库上插入的数据,备库也可以查到
7. show tables 看得到表


临时表:


1、创建:

CREATE TEMPORARY TABLE tmp_table (
	name VARCHAR(10) NOT NULL,
	value INTEGER NOT NULL
)  

2、特点:

1. 创建的表的名字可以一样 
2. 表结构和数据都放在内存中
3. 会话消失表结构和数据都消失
4. 可以创建索引,删除索引
5. 主库创建的表,备库查不到,
6. show tables 看不到表


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn