MySQL基础知识点整理-存储引擎0.查看MySQL支持的存储引擎可以使用showengines;在mysql客户端查看mysql支持的引擎命令:mysql>showengines;+--------------------+----------+-----------------------------------------------------------------+----------------+------+------------+|发动机|支持|评论|交易|XA|保存点|+--------------------+--------+----------------------------------------------------------+------------+------+------------+|数据库|默认|支持事务、行级锁定和外键|是|是|是||MRG_MYISAM|是|相同MyISAM表的集合|否|否|否||内存|是|基于哈希,存储在内存中,对临时表很有用|否|否|否||黑洞||/dev/null存储引擎(你写入的任何内容都会消失)|否|否|否||我的ISAM|是|MyISAM存储引擎|否|否|否||格式|是|CSV存储引擎|否|否|否||存档|是|归档存储引擎|否|否|否||性能_SCHEMA|是|性能架构|否|否|否||联合|否|联邦MySQL存储引擎|空|空|空|+--------------------+--------+--------------------------------------------------------------+-------------+------+------------+9组中的行(0.06秒)1。InnoDB引用引擎InnoDB是MySQL默认的存储引用引擎,也是最作为使用最广泛的存储引擎,InnoDB的性能和自动崩溃恢复功能使其在非事务性存储需求中也很受欢迎。除非有非常具体的原因需要使用其他存储引擎,否则应该首选InnoDB引擎。InnoDB具有对事务的支持。支持外键约束。支持行级锁机制。支持崩溃后的安全恢复。真正的热备份是通过一些机制和工具来支持的。主内存中会建立一个专门的缓冲池用于缓存数据和索引,因此InnoDB表需要更多的内存和存储空间。InnoDB是聚集索引。数据文件与索引相关联,并且必须具有主键。通过主键索引效率非常高。但是,辅助索引需要两次查询。首先查询主键,然后通过主键查询数据。所以主键不宜太大,因为如果主键太大,其他索引也会很大。InnoDB不保存表的具体行数,执行selectcount(*)fromtable时需要全表扫描。InnoDB使用共享表空间存储来存储表和索引有两种方式:表结构保存在.frm文件中,数据和索引在innodb_data_home_dir和innodb_data_file_path定义的表空间中,可以是多个文件。使用多表空间存储:表结构保存在.frm文件中,每张表的数据和索引分别保存在.ibd文件中。InnoDB使用场景更新密集型表:InnoDB存储引擎特别适合处理多个并发的更新请求。事务:InnoDB存储引擎是支持事务的标准MySQL存储引擎。自动灾难恢复:InnoDB表可以自动从灾难中恢复。外键约束:MySQL中唯一支持外键的存储引擎是InnoDB。支持自动递增列的AUTO_INCREMENT属性。2、MyISAM引擎MyISAM是MySQL5.1及更早版本默认的存储引擎。MySQL8即将弃用MyISAM引擎。MyISAM提供全文索引、压缩和空间函数(GIS)等功能。MyISAM不支持事务和行级锁,崩溃后无法安全恢复。MyISAM支持全文索引。支持表级锁,不支持行级锁。不支持交易。具有很高的插入和查询速度。MyISAM是非聚集索引,数据文件是分离的,索引存放的是数据文件的指针。主键索引和二级索引是独立的。MyISAM使用一个变量来保存整个表的行数。执行selectcount(*)fromtable时,只需要读取变量即可,速度非常快。MyISAM的三种存储格式MyISAM的三种存储格式是静态的、动态的和压缩的。MyISAM会根据表的定义自动选择存储格式。静态表:如果数据表中每个数据列的长度是预先固定的,那么服务器会自动选择这种表类型。因为数据表中每条记录占用的空间是一样的,所以这个表的访问和更新的效率是非常高的。当数据损坏时,恢复工作也比较容易做。动态表:如果数据表中出现varchar、*text或*BLOB字段,服务器会自动选择这种表类型。与静态MyISAM相比,该表的存储空间相对较小,但由于每条记录的长度不同,多次修改数据后,数据表中的数据可能会分散存储在内存中,导致性能下降在执行效率上。同时,内存中可能会出现大量的碎片。因此,应经常使用优化表命令或优化工具对此类表进行碎片整理。压缩表:可以使用myisamchk工具对上面提到的两类表进行压缩。如果数据创建导入后表没有被修改,这样的表适合使用MyISAM压缩表。此类表进一步减少了占用的存储空间,但此类表压缩后无法修改。另外,由于是压缩数据,这种表在读取时必须先解压。MyISAM表存储每个MyISAM表在磁盘上存储为三个文件,每个文件的名称以表名开头,扩展名表示文件类型。.frm文件存储表结构定义。.MYD(MYData)文件存储表的数据。.MYI(MYIndex)文件存储表的索引。MyISAM使用场景查询密集型表:MyISAM存储引擎在过滤大量数据时速度非常快,这是它最突出的优势;插入密集型表:MyISAM的并发插入特性允许同时选择和插入数据。例如:MyISAM存储引擎非常适合管理邮件或网络服务器日志数据。3.MEMORY引擎MEMORY引擎(也称为HEAP引擎)将所有数据存储在内存中,无需磁盘I/O。因此,MEMORY表至少比MyISAM表快一个数量级。当MySQL重启或mysqld守护进程崩溃时,Memory表的结构会保留,但所有数据都会丢失。获得速度也有一些缺点。它要求存储在Memory数据表中的数据是定长格式,也就是说不能使用BLOB、TEXT等变长数据类型。VARCHAR是变长类型,但是因为在MySQL内部被认为是定长的CHAR类型,所以可以使用。MEMORY的特征数据全部存储在内存中,不需要磁盘I/O。支持哈希索引和B树索引。支持表级锁,不支持行级锁。服务重启后,表结构会保留,但数据会丢失。不支持TEXT和BLOB类型的列。MEMORY使用场景需要快速访问数据,而且这些数据不会被修改,重启后丢失也无所谓。对于查找(lookup)或映射(mapping)表,例如将邮政编码映射到地址的表。用于保存数据分析中产生的中间数据。用于缓存周期聚合数据的结果。4.ARCHIVE引擎ARCHIVE引擎是一个针对插入和压缩优化的简单存储引擎。ARCHIVE引擎只支持INSERT和SELECT操作。在MySQL5.1之前也不支持索引。ARCHIVE引擎使用zlib压缩插入的行,因此它比MyISAM表需要更少的磁盘I/O。ARCHIVE功能仅支持INSERT和SELECT操作。MySQL5.1之前不支持索引。支持行级锁和私有缓冲区。ARCHIVE使用场景适用于日志和数据采集类应用,经常需要全表扫描进行数据分析。需要快速INSERT操作的场景。5.MERGE引擎MERGE存储引擎是MyISAM引擎的一个变体。MERGE表是将多张MyISAM表合并后得到的一张虚表,这些MyISAM表的结构必须完全相同。Merge表中没有数据,Merge类型的表可以查询、更新、删除。这些操作实际上是在内部的MyISAM表上执行的。Merge存储引擎使用场景对于服务器日志等信息,常见的存储策略是将数据分到很多表中,每个表名对应一个特定的时间结束。例如:可以用12张相同的表来存放服务器的日志数据,每张表以每个月对应的名字命名。当需要根据所有12个日志表的数据生成报告时,这意味着编写和更新多表查询以反映这些表中的信息。与其写这些可能会出错的查询,还不如将这些表合并起来使用一个查询,然后在不影响原有数据的情况下删除Merge表。删除Merge表只会删除Merge表的定义,对内部表没有影响。.但引入分区功能后,该引擎就被废弃了。6.CSV引擎CSV引擎可以把普通的CSV文件当作MySQL表来处理,但是这样的表不支持索引。CSV的特性您可以将普通的CSV文件视为MySQL表。所有列不能为NULL,不支持索引(不适合大表,不适合在线处理)可以直接编辑数据文件(保存文本文件内容)CSV使用场景适合作为数据交换的中间表(可以用在服务器运行的时候复制复制文件,可以将电子表格存储为CSV文件,然后复制到MySQL数据目录下,就可以在数据库中打开使用了。同理,如果数据是写入CSV文件数据表,其他网页程序也可以快速读取数据。
