zoukankan      html  css  js  c++  java
  • MySQL存储引擎

    MySQL的存储引擎种类很多,有MyISAM、InnoDB、Archive、Blackhole、CSV、Memory、Merge、NDB等。以下主要介绍MyISAM和InnoDB。
    MyISAM
    在MySQL 5.1之前的版本,MyISAM是默认的存储引擎。MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务、不支持外键、不支持行级锁(仅支持表级锁)。特点是访问速度快,对事务完整性没有要求。以select、insert为主的应用基本上都可以用这个引擎来创建表。MyISAM类型的表可能会损坏,原因可能多种多样。可以通过check table语句检查MyISAM表的健康,并用repair table语句修复一个损坏的MyISAM表。
    MyISAM表磁盘上存储成3个文件,其中文件名和表名一致,但扩展名分别是:
    .frm(存储表定义)
    .MYD(MyData,存储数据)
    .MYI(MyIndex,存储索引)
    MyISAM特性是:
    1.加锁与并发:对整张表加锁,而不是针对行。读取时会对需要读到的所有表加共享锁,写入时则对表加排它锁。但是在表有读取查询的同时,也可以往表中插入新的记录(这被称为并发插入);
    2.为保证效率,不支持事务处理;
    3.count(*)时效率高,不用遍历全表,原因是该引擎会记录行数;
    4.非聚簇索引,支持全文索引,索引数据和表数据分开存储;
    InnoDB
    支持事务,具有提交、回滚和崩溃恢复能力。默认行级锁,是基于聚簇索引建立的。聚簇索引对主键查询有很高的性能。不过它的二级索引中必须包含主键列,所以如果主键很大的话,其他索引都会很大。存储格式是平台独立的,可以将数据和索引文件复制到其他平台。
    InnoDB存储方式:
    1.使用共享表空间存储,这种创建的表,表结构数据保存在.frm文件中,数据和索引数据保存在innodb_data_home_dir和innodb_data_file_path定义的表中间,可以是多个文件;
    2.使用多表空间存储,这种方式创建的表,表结构数据仍然存在.frm文件中,但是每个表的数据和索引单独保存在.ibd中,如果是个分区表,则每个分区对应单独的.ibd中,文件名是“表名+分区名”,可以在创建分区的时候指定每个分区的数据文件位置,以此来将表的IO均匀分布在多个磁盘中;
    InnoDB特性是:
    1.事务安全;
    2.行级锁,为承受高并发增加了竞争力;
    3.count(*)时效率低,遍历表计算数量;
    4.聚簇索引,主键默认为聚簇索引,没有主键时以第一列为聚簇索引,普通索引指向聚簇索引;
    5.支持主键、外键。

  • 相关阅读:
    OpenID Connect 验证
    升级到 .NET Core 3.1
    深入 .NET Core 基础
    依赖注入在 dotnet core 中实现与使用:3 使用 Lazy<T> 延迟实例化
    依赖注入在 dotnet core 中实现与使用:2 使用 Extensions DependencyInjection
    依赖注入在 dotnet core 中实现与使用:1 基本概念
    ng-bootstrap 组件集中 tabset 组件的实现分析
    一笔百亿美元军方订单,引发了美国科技公司大混战
    4种事务的隔离级别,InnoDB怎样巧妙实现?
    Google I/O 官方应用中的动效设计
  • 原文地址:https://www.cnblogs.com/caohongchang/p/11594980.html
Copyright © 2011-2022 走看看