MySQL 支持很多存储引擎,如 MyISAM、InnoDB、memory、archive、example等,一般情况下大家可能直接就用默认引擎了。了解不同引擎的区别有助于在技术方案中使用合适的引擎,达到最好的效果。本文简单总结下,以备查阅。
MySQL 5.5 版本之前,MyISAM 是默认存储引擎。ISAM 是 Indexed Sequential Access Method(有索引的顺序访问方法)的缩写,MyISAM 是 ISAM 的改进版。
MyISAM 引擎适用于查询比较频繁、 count 计算较多、不使用事务的场景。MyISAM 具有如下特点:
MyISAM 是非聚集索引,使用 B+ Tree 作为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
MySQL 5.5 版本开始使用 Innodb 作为默认引擎。InnoDB 由 Innobase Oy公司所开发。
InnoDB 引擎适用于可靠性要求比较高、查询更新都比较频繁、需要事务保证的场景。InnoDB 引擎具有如下特点:
InnoDB 是聚集索引,使用 B+Tree 作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+Tree组织的一个索引结构),必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。
MyISAM 不支持事务,InnoDB 支持事务。
MyISAM 不支持外键,InnoDB 支持外键。
MyISAM 支持表级锁,InnoDB 支持表级锁和行级锁(默认)。
MyISAM 表可以没有主键,InnoDB 表必须有主键,如果用户不设置就会自动生成主键。
MyISAM 存储文件有 frm(表定义文件)、myd(数据文件)、myi(索引文件),Innodb 存储文件有 frm(表定义文件)、ibd(数据文件)。
MyISAM 可以使用自增字段(AUTO_INCREMENT)和其他字段建立联合索引,InnoDB 必须包含只有该字段的索引。
清空表时,MyISAM 重新建表,InnoDB 逐行删除。
MyISAM 允许没有任何索引和主键的表存在,索引都是保存行的地址。InnoDB 如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。
MyISAM 的B+树主键索引和辅助索引的叶子节点都是数据文件的地址指针。InnoDB 的B+树主键索引的叶子节点就是数据文件,辅助索引的叶子节点是主键的值。
本文来源:程序之心,转载请注明出处!
知识图谱是较为典型的多学科交叉领域,涉及知识工程、自然语言处理、机器学习、图数据库等多个领域。《知识图谱:方法、实践与应用》系统地介绍知识图谱涉及的关键技术,如知识建模、关系抽取、图存储、自动推理、图谱表示学习、语义搜索、知识问答、图挖掘分析等。此外,本书还尝试将学术前沿和实战结合。
最新内容
© 2016 - 2024 chengxuzhixin.com All Rights Reserved.