MySQL的存储引擎

    科技2026-01-01  12

    MySQL的存储引擎

    参考链接: mysql存储引擎

    文件系统中,MySQL将每个数据库保存为数据目录下的一个子目录。创建表时,会创建.frm保存表的定义和数据

    InnoDB是默认事物型引擎,设计用来处理大量的短期(short-liived)事物,短期事物大部分正常提交,很少会被回滚。它支持排序创建索引、删除或者增加索引时不需要复制全表数据、新的支持压缩的存储格式。

    InnoDB可以通过间隙锁(检索条件必须有索引(没有索引的话,mysql会全表扫描,那样会锁定整张表所有的记录,包括不存在的记录,此时其他事务不能修改不能删除不能添加))策略防止幻读的出现。

    InnoDB能够自动在内存中创建hash索引,以加速读操作的自适应哈希索引;加速插入操作的插入缓冲区(insert buffer)等

    MyISAM存储引擎

    5.1之前的默认引擎但是,崩溃后无法恢复。

    其将表存储在: 数据文件(.MYD): 索引文件(.MYI):

    MyISAM可以对表进行压缩。压缩表是不能进行修改的(除非先将表解除压缩);可以极大的减少磁盘空间占用,因此也可以减少磁盘I/O,从而提升查询性能。

    MEMORY存储引擎

    Memory存储引擎使用存在于内存中的内容来创建表。每个memory表只实际对应一个磁盘文件,格式是.frm。memory类型的表访问非常的快,因为它的数据是放在内存中的,并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失掉。 MEMORY存储引擎的表可以选择使用BTREE索引或者HASH索引,两种不同类型的索引有其不同的使用范围

    Hash索引优点: Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引。 Hash索引缺点: 那么不精确查找呢,也很明显,因为hash算法是基于等值计算的,所以对于“like”等范围查找hash索引无效,不支持;

    Memory类型的存储引擎主要用于哪些内容变化不频繁的代码表,或者作为统计操作的中间结果表,便于高效地对中间结果进行分析并得到最终的统计结果,。对存储引擎为memory的表进行更新操作要谨慎,因为数据并没有实际写入到磁盘中,所以一定要对下次重新启动服务后如何获得这些修改后的数据有所考虑。

    MERGE存储引擎

    Merge存储引擎是一组MyISAM表的组合,这些MyISAM表必须结构完全相同,merge表本身并没有数据,对merge类型的表可以进行查询,更新,删除操作,这些操作实际上是对内部的MyISAM表进行的

    选择合适的引擎

    全文索引,建议优先考虑InnoDB加上Sphinx组合;MyISAM和ARchive存储引擎对开销低,插入速度非常快

    对于更换引擎可以使用ALTER TABLE语句更换数据引擎。如下:

    ALTER TABLE mytable ENGINE=InnoDB;

    使用mysqldump工具将数据导出到文件

    使用CREATE创建新表,再将旧表的数据导入新表之中

    CREATE TABLE innodb_table LIKE myisam_table; ALTER TABLE innodb_table ENGINE=InnoDB; INSERT INTO innodb_table SELECT *FROM myisam_table;
    Processed: 0.013, SQL: 9