数据库的几类文件:表定义文件(.frm)、数据文件(.MYD)、索引文件(.MYI)
存储引擎
通俗来讲,是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
在MySql数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎。Oracle中没有存储引擎的概念,
仅OLTP和OLAP模式的区分,无论哪种模式都支持事务。所有只谈论mysql的存储引擎类型。
使用show engines命令可以显示当前数据库支持的存储引擎
主要的几种:
MyISAM(静态、动态、压缩):不支持事务、外键约束、行级锁(支表级锁);拥有较高的插入、查询速度。
InnoDB:支持事务、外键约束、行级锁。
Memory:表结构存放在磁盘,数据存放在内存,重启后数据清空;不支持BLOB、TEXT列;可以通过max_heap_table_size指定所使用的内存大小,当数据超过内存大小时会报错;操作速度快。
一个数据库中的不同表可以选用不同的存储引擎
内存表与临时表区别
参考:http://www.t086.com/article/5084
https://www.cnblogs.com/sunss/p/3191137.html
内存表:可以存放一些经常使用的数据。内存表大多数是当Cache用,在早期一台机器没有装Memcache等第三方cache时,内存表无疑是cache的最好的选择。而如今随着memcache、NoSQL的流行,内存表就越来越少人使用了
1. 多个session(会话),创建表的名字不能一样
2. 一个session创建会话后,对其他session也是可见的
3. data目录下只有tmp_memory.frm ,表结构放在磁盘上,数据放在内存中
4. mysql 重启或者关闭后内存表里的数据会丢失,但是表结构仍然存在
5. 支持索引、支持自增字段、查询缓存
6. show tables 看得到表
临时表:主要是为了存放一些中间大结果的子集,一般很少用,要用也一般是在程序中动态创建或者由MySQL内部根据SQL执行计划需要自己创建。
MySQL自动创建临时表场景:https://blog.csdn.net/xiaolyuh123/article/details/53286033
1. 创建的表的名字可以一样
2. 表结构和数据都放在内存中,通过tmp_table_size来设定内存临时表大小,当数据量超过tmp_table_size所设定的值时MySQL会自动将其转成磁盘上的临时表
3. 会话消失表结构和数据都消失
4. show tables 看不到表
5. 可使用各类存储引擎
OLTP与OLAP