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.支持主键、外键。

  • 相关阅读:
    oracle中Blob和Clob类型的区别
    为什么要分库分表
    Enable file editing in Visual Studio's debug mode
    SQL Server Dead Lock Log
    Debug .NET Framework Source
    SQL Server text field里面有换行符的时候copy到excel数据会散乱
    诊断和修复Web测试记录器(Web Test Recorder)问题
    Can't load Microsoft.ReportViewer.ProcessingObjectModel.dll
    'telnet' is not recognized as an internal or external command
    Linq to XML
  • 原文地址:https://www.cnblogs.com/caohongchang/p/11594980.html
Copyright © 2011-2022 走看看