MySQL的存储引擎---------------InnoDB存储引擎和MyISAM存储引擎
数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建查询更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使不同的存储引擎,还可以获得特定的功能。 现在许多不同的数据库管理系统都支持不同的数据引擎。MySQL的核心就是插件式存储引擎。---------------------------------------》官方定义
1.查看存储引擎
SHOW ENGINERS
2.InnoDB存储引擎
InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁和外键。MySQL 5.5.5 之后,InnoDB作为默认存储引擎,InnoDB主要的特性:
-
InnoDB 给MySQL提供了具有提交、回滚、崩溃护肤能力的事务安全(ACID兼容)存储引擎。
InnoDB 锁定在行级并且也在select语句中提供了一个类似Oracle 的非锁定读。这些功能增加了
多用户部署和性能。在SQL查询中,可以自由的将InnoDB类型的表与其他MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。
-
InnoDB是为了处理巨大数据量的最大性能设计。它的CPU的小鲁班可能是任何其他基于磁盘的关系数据库引擎所不能匹敌的
-
InnoDB存储引擎完全与MySQL服务器整合,InnoDB 存储引擎在主内存中缓存数据和索引维持它自己的缓冲池。InnoDB将的表和索引存在一个逻辑表空间中,表空间可以包含数个文件(或原始磁盘分区)。这与MyISAM表不同,比如在MyISAM表中每个表被存在分离的文件中。InnoDB表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上。
-
InnoDB支持外键完整性约束(FOREIGN KEY)。存储表中的数据是,每张表的存储都按主键顺序存放,如果没有显示在表定义是指定主键,InnoDB会被每一行生成一个6B的ROWID,并以此作为主键
-
InnoDB 被用在众多需要高性能的大型数据库站点上。 InnoDB 不创建目录,使用 InnoDB 时,MySQL 将在 MYSQL 数据目录下创建一个名为 ibdata1 的 10MB 大小的自动扩展数据文件,以及两个名为ib_logfile() 和 ib_logfile1 的 5MB 大小的日志文件。
-
MyISAM存储引擎
MyISAM 基于 ISAM 的存储引擎,并对其进行扩展。它是在 Web、数据存储和其他应用环境下最常用的存储引擎之一。MyISAM 拥有较高的插入、查询速度,但不支持事务。在 MySQL5.5.5 之前的版本中,MyISAM 是默认存储引擎。MyISAM 主要特性有:
- MEMORY 表的每个表可以多达 32 个索引,每个索引 16 列,以及 500B 的最大键长度
- MEMORY 存储引擎引擎执行 HASH 和 BTREE 索引。
- 可以在一个 MEMORY 表中有非唯一键
- MEMORY 不支持 BLOB 或 TEXT 列。
- MEMORY 表使用一个固定的记录长度格式。
- MEMORY 支持 AUTO_INCREMENT 列和对包含 NULL 值的列索引。
- MEMORY 表内容被存在内存中,内存是 MEMORY 表和服务器在查询处理时的空闲中创建的内部表共享。
- MEMORY 表在所有客户端之间共享(就像其他任何非 TEMPORARY 表)。
- 当不再需要 MEMORY 表的内容时,要释放被 MEMORY 表使用的内存,应该执行 DELETE FROM 或 TRUNCATE TABLE,或者删除整个表(使用 DROP TABLE)。
-
存储引擎的选择
功能 MyISAM Memory InnoDB Archive 存储限制 265TB RAM 65TB Node 支持事务 No No Yes No 支持全文索引 Yes No No No 支持数索引 Yes Yes Yes No 支持哈希索引 No Yes No No 支持数据缓存 No N/A Yes No 支持外键 No No Yes No
InnoDB: 支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。
MyISAM: 插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比 较低,也可以使用。
MEMORY: 所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。
**注意:**同一个数据库也可以使用多种存储引擎的表。如果一个表要求比较高的事务处理,可以选择InnoDB。这个数据库中可以将查询要求比较高的表选择MyISAM存储。如果该数据库需要一个用于查询的临时表,可以选择MEMORY存储引擎。