即墨网站建设在哪,网站建设公司海南,网站运营总结,j2ee网站开发简介
数据库存储引擎#xff1a;是数据库底层软件组织#xff0c;数据库管理系统#xff08;DBMS#xff09;使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能#xff0c;使用不同的存储引擎#xff0c;还可以…简介
数据库存储引擎是数据库底层软件组织数据库管理系统DBMS使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能使用不同的存储引擎还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是插件式存储引擎。
查看引擎
可以使用 SHOW ENGINES; 查看当前数据库支持的所有存储引擎 Engine列代表存储引擎类型Support列代表对应存储引擎是否能用YES表示可以用NO表示不能用DEFAULT表示当前默认的存储引擎 myql提供了多种不同存储引擎也可以在一个数据库中针对不同的要求使用不同的存储引擎。
SHOW VARIABLES LIKE %storage_engine%; 可以查看当前数据库默认的存储引擎 引擎介绍
InnoDB存储引擎 InnoDB是事务型数据库的首选引擎支持事务安全表ACID其它存储引擎都是非事务安全表支持行锁定和外键MySQL5.5以后默认使用InnoDB存储引擎。 InnoDB为MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全ACID兼容存储引擎。 InnoDB表自动增长列必须是索引如果是组合索引也必须是组合索引的第一列。 InnoDB设计的目标是处理大容量的数据库系统这种引擎的表会在内存中建立缓冲池用来缓冲数据和索引。 MySQL外键的存储引擎只有InnoDB 适用场景 经常更新的表多并发的表 大数据量 支持事务 容灾恢复 外键约束MyISAM存储引擎 MyISAM基于ISAM存储引擎并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度但不支持事务不支持外键。 MYD文件是存MyISAM的数据文件MYI文件是存MyISAM的索引文件frm文件是存MyISAM的表结构 MyISAM的表支持3种不同的存储格式静态(固定长度)表动态表压缩表 静态表表中的字段都是非变长字段这样每个记录都是固定长度的优点存储非常迅速容易缓存出现故障容易恢复缺点是占用的空间通常比动态表多 动态表记录不是固定长度的这样存储的优点是占用的空间相对较少缺点频繁的更新、删除数据容易产生碎片需要定期执行OPTIMIZE TABLE或者myisamchk-r命令来改善性能 压缩表因为每个记录是被单独压缩的所以只有非常小的访问开支 适用场景 不支持事务、外键的设计 查询速度很快极度强调读操作而且不占用大量的内存和存储资源 整表加锁MEMORY存储引擎 Memory存储引擎使用存在于内存中的内容来创建表所以也有叫HEAP堆内存引擎。每个memory表只实际对应一个磁盘文件格式是.frm。memory类型的表访问非常的快因为它的数据是放在内存中的并且默认使用HASH索引但是一旦服务关闭表中的数据就会丢失掉。 MEMORY存储引擎的表可以选择使用BTREE索引或者HASH索引 Hash索引优点Hash 索引结构的特殊性其检索效率非常高索引的检索可以一次定位查询效率要远高于 B-Tree 索引但是hash算法是基于等值计算的所以模糊查询hash索引无效不支持 适用场景 Memory类型的存储引擎主要用于内容变化低、不频繁的如代码表 目标数据比较小而且非常频繁的进行访问的 数据是临时的而且必须立即可用得到的
对存储引擎为memory的表进行更新操作要谨慎因为数据并没有实际写入到磁盘中
MERGE \ MRG-MYISAM存储引擎 Merge存储引擎是一组MyISAM表的组合这些MyISAM表必须结构完全相同merge表本身并没有数据对merge类型的表可以进行查询更新删除操作这些操作实际上是对内部的MyISAM表进行的 MRG-MYISAM是一种水平分表方式存储引擎把多个myisam的表聚合起来但是他内部没有数据真正的数据依然是myisam引擎。 使用场景 水平分表BLACKHOLE黑洞引擎 任何写入此引擎的数据均会被丢弃不做实际存储select结果永远为空 使用场景 复制数据到备份数据库 验证dump file命令的正确性 检测binlog功能所需的额外负载 充当日志服务器
存储引擎对比
MyISAM引擎不支持事务等高级处理Innodb支持提供事务支持、外键等高级功能 Innodb引擎是行锁但是也不是绝对的当不确定范围时Innodb还是会锁表的MyISAM引擎强调的是性能读性能非常好比Innodb速度要快。 mysql数据库默认是开启事务的Innodb引擎表要在提交大量数据时可以先关闭自动提交事务set autocommit0;待数据执行完后再开启事务自动提交set autocommit1; 以此来提高速度不然大数据提交非常慢对于auto_increment类型的字段 Innodb中必须包含只有该字段的索引而MyISAM表中可以和其他字段一起建立联合索引。MyISAM支持全文索引(fulltext)、压缩引擎Innodb不支持MyISAM引擎表索引和数据分开存在两个不同格式文件中并且索引是压缩的而Innodb表的索引和数据是捆绑在一起的没有压缩所以同等数据量Innodb引擎表占用的存储空间更大。Innodb表数据备份要先到处sql备份load table from master操作对Innodb不起作用。要解决这个问题需要先把表的引擎Innodb改成MyISAM导入数据后再改成Innodb。但要注意外键只有Innodb支持MyISAM不支持。