存储引擎是 MySQL 的组件,用于处理不同表类型的 SQL 操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。
存储引擎是 MySQL 的组件,用于处理不同表类型的 SQL 操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。
MySQL引擎是数据库的核心组件之一,决定了数据库的性能、可靠性和功能特性。
MySQL引擎的作用包括但不限于以下几个方面:
MySQL支持多种不同类型的存储引擎,每种引擎都有其自身的特点和适用场景。以下是 MySQL 支持的一些常见引擎及其区别和特点:
① InnoDB:
② MyISAM:
③ MEMORY(也称为HEAP):
④ NDB Cluster:
⑤ 其他引擎:
这些引擎之间的主要区别和特点包括:
在选择 MySQL 引擎时,需要根据应用场景和需求综合考虑各种因素,包括事务需求、性能要求、可靠性需求等,以选择最适合的引擎。
-- 查看支持的存储引擎 SHOW ENGINES -- 查看默认存储引擎 SHOW VARIABLES LIKE '%storage_engine%' --查看具体某一个表所使用的存储引擎,这个默认存储引擎被修改了! show create table tablename --准确查看某个数据库中的某一表所使用的存储引擎 show table status like 'tablename' show table status from database where name="tablename"
-- 建表时指定存储引擎。默认的就是INNODB,不需要设置 CREATE TABLE t1 (i INT) ENGINE = INNODB; CREATE TABLE t2 (i INT) ENGINE = CSV; CREATE TABLE t3 (i INT) ENGINE = MEMORY; -- 修改存储引擎 ALTER TABLE t ENGINE = InnoDB; -- 修改默认存储引擎,也可以在配置文件my.cnf中修改默认引擎 SET default_storage_engine=NDBCLUSTER;
InnoDB 支持 ACID 的事务处理,MyISAM 并不支持事务,这里需要注意,如果我们在程序需要进行事务处理,所有的数据都要使用 Innodb 存储引擎,如果中间有 MyISAM 存储引擎的数据表,如果进行事务回滚,MyISAM 并不会回滚到之前的状态,因此 MyISAM 不支持事务。
InnoDB 存储引擎使用的是聚集索引,InnoDB 主键的叶子节点是该行的数据,而其他索引则指向主键,而 MyISAM 存储引擎使用的是非聚集索引,主键与其他索引的叶子节点都存储了指向数据的指针。
另外一个是 MyISAM 数据表允许没有主键和其他索引,而 InnoDB 数据表如果没有主键的话,而会生成一个用户不可见6字节的主键。
MyISAM 不支持外键,而 Innodb 则支持建立数据表之间的外键关联。
Innodb 存储文件有 frm、ibd,而 MyISAM 是 frm、MYD、MYI,Innodb 存储文件中 frm 是数据表结构定义文件,ibd 是数据文件,MyISAM 中 frm 是数据表结构定义文件,MYD 是数据的文件,MYI 则是存储索引的文件。
使用 MyISAM 存储引擎的数据表会记录一个数据表的总行数,所以对使用 MyISAM 存储引擎的数据表进行 select count(*),可以很快得到一个数据表的总行数,而对于 InnoDB 存储引擎的数据表,想要查询总行数需要进行全表扫描才能得到。
InnoDB 支持行级锁,而 MyISAM 只支持表级锁,因此 InnoDB 更能支持高并发。