• MySQL数据库引擎


     

    1.ISAM

    在设计ISAM之前就考虑到查询的次数要大于数据更新的次数,因此ISAM引擎的读取的效率是非常的快的,不占用大量的内存和存储空间,但是不支持事物的处理,下面分析ISAM引擎的优缺点。

    ISAM的优点:

    读取数据速度快、不占用大量的内存和存储资源

    ISAM的缺点:

    不支持事物
    不容错

    使用ISAM引擎的注意点:

    由于他不支持事物的处理,并且不容错,所以必要备份数据。

    2.MyISAM

    MyISAM是MySQL对于ISAM的扩展引擎,在MySQL5.6以后的版本出现,简单来说ISAM引擎有的东西,它都有,MyISAM提供了索引和字段管理的大量功能,MyISAM还提供了表格锁定的机制用来优化多个并发的读写操作、但是有代价的,要经常运行 OPTIMIZE TABLE 命令来恢复优化过机制所浪费的空间、MyISAM知道自己的缺点所以提供了优化工具、比如MyISAMCHK工具用来恢复浪费的空间。

    MyISAM的优点:

    增强了ISAM引擎的功能,增加了索引、表格锁的机制优化并发读写

    MyISAM的缺点:

    因为有了表格锁的机制、最大的缺陷就是不能在表损坏后恢复数据,和ISAM一样不支持事物,数据量越大、写入效率越低。

    使用MyISAM引擎的注意点:

    数据要备份、虽然有索引提升效率,但是要正确的使用索引,如果索引的字段越多维护索引的信息就会越多,随着数据量的增加,相对的效率也会降低。

    使用MyISAM引擎生成的文件

    如果使用MyISAM数据库引擎,会生成三个文件:
    .frm:表结构信息
    .MYD:数据文件
    .MYI:表的索引信息

    3.InnoDB引擎

    InnoDB数据库引擎是直接造就MySQL辉煌的引擎,他能弥补ISAM、MyISAM的不足之处,他能支持事物的处理、也能支持外键、尽管比ISAM、MyISAM的查询速度慢一点,但是自身‘全能’的优点完全可以胜出,现在MySQL5.6以上的版本默认的数据库引擎是InnoDB引擎MySQL,官方对InnoDB是这样解释的:InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读,这些特色增加了多用户部署的性能。没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。InnoDB也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。

    InnoDB的优点:

    遵循ACID模式设计,具有事务,回滚和保护用户数据的崩溃恢复能力,InnoDB为大数据量发挥最大性能而设计的,针对提升CPU的效率而生,其它任何基于磁盘的关系数据库引擎都不能和它做比较。

    InnoDB的缺点:

    没有MyISAM、ISAM查询速度来的快。

    InnoDB引擎的特点:
    1. 支持事务

    2. 数据多版本读取(InnoDB+MyISAM+ISAM)

    3. 锁定机制的改进

    4. 实现外键

    innodb与myisam区别

    1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin transaction和commit之间,组成一个事务;

    2. InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;

    3. InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。

    4. InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;

    5. Innodb不支持全文索引。支持全文索引,查询效率上MyISAM要高。

  • 相关阅读:
    LeetCode 654. 最大二叉树
    LeetCode 617. 合并二叉树
    LeetCode 234. 回文链表
    LeetCode 328. 奇偶链表
    LeetCode 24. 两两交换链表中的节点
    LeetCode 21. 合并两个有序链表
    LeetCode 876. 链表的中间结点
    顺序表的定义及其相关基本操作
    LeetCode 206. 反转链表
    LeetCode 111. 二叉树的最小深度
  • 原文地址:https://www.cnblogs.com/wyglog/p/12571264.html
Copyright © 2020-2023  润新知