美文网首页程序员
mysql存储引擎InnoDB和MyISAM如何选择

mysql存储引擎InnoDB和MyISAM如何选择

作者: 自由图书 | 来源:发表于2018-01-30 21:17 被阅读0次

    mysql数据库作为程序猿的必备技能,大家应该每天都在疯狂的操作数据库,but对于数据库的存储引擎真正了解多少呢?呵呵。。。没关系,本老湿今天来给大家科普一下啊。

    Mysql有很多中存储引擎 MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV 等,今天主要介绍两种最常用的引擎,MyISAM、InnoDB。

    先说MyISAM吧:
    MyISAM管理非事物表,它具备高速存储和检索,全文检索的能力,适合做大量的select,其主要特性包括
    1>count计算能力。
    2>查询非常频繁,插入不频繁,优化了多个并发的读写操作。
    3>没有事物,不支持事物。
    4>like查询效率高。
    5>不支持外键。

    InnoDB:
    这种类型是事务安全的,对于这个类型的数据库表AUTOCOMMIT默认设置是打开的,而且程序里面没有显示调用BEGIN开始事务,导致每插入一条都自动Commit,严重影响速度,严重影响了速度。可以在执行sql前调用begin,多条sql形成一个事物(即使autocommit打开也可以),将大大提高性能,它的主要特性包括
    1>支持事务,在一些列增删改中只要哪个出错可以回滚还原。
    2>支持外键。
    3>支持行锁。

    人无完人 ,数据库引擎亦是如此。

    MyISAM:

    MyISAM表格可以被压缩,而且它们支持全文搜索。不支持事务,而且也不支持外键。如果事物回滚将造成不完全回滚,不具有原子性。在进行updata时进行表锁,并发量相对较小。如果执行大量的SELECT,MyISAM是更好的选择。

    MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小

    MyISAM缓存在内存的是索引,不是数据。而InnoDB缓存在内存的是数据,相对来说,服务器内存越大,InnoDB发挥的优势越大。

    优点:查询数据相对较快,适合大量的select,可以全文索引。

    缺点:不支持事务,不支持外键,并发量较小,不适合大量update

    InnoDB:

    这种类型是事务安全的。.它与BDB类型具有相同的特性,它们还支持外键。InnoDB表格速度很快。具有比BDB还丰富的特性,因此如果需要一个事务安全的存储引擎,建议使用它。在update时表进行行锁,并发量相对较大。如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。

    优点:支持事务,支持外键,并发量较大,适合大量update

    缺点:查询数据相对较快,不适合大量的select

    对于支持事物的InnoDB类型的表,影响速度的主要原因是AUTOCOMMIT默认设置是打开的,而且程序没有显式调用BEGIN 开始事务,导致每插入一条都自动Commit,严重影响了速度。可以在执行sql前调用begin,多条sql形成一个事物(即使autocommit打开也可以),将大大提高性能。

    基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。

    MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。

    这个是参考别人的性能测试结果:
    所有的性能测试在:Micrisoft window xp sp2 , Intel(R) Pentinum(R) M processor 1.6oGHz 1G 内存的电脑上测试。
    测试方法:连续提交10个query, 表记录总数:38万 , 时间单位 s
    引擎类型 MyISAM InnoDB 性能相差
    count 0.0008357 3.0163 3609
    查询主键 0.005708 0.1574 27.57
    查询非主键 24.01 80.37 3.348
    更新主键 0.008124 0.8183 100.7
    更新非主键 0.004141 0.02625 6.338
    插入 0.004188 0.3694 88.21
    (1)加了索引以后,对于MyISAM查询可以加快:4 206.09733倍,对InnoDB查询加快510.72921倍,
    同时对MyISAM更新速度减慢为原来的1/2,InnoDB的更新速度减慢为原来的1/30。
    要看情况决定是否要加索引,比如不查询的log表,不要做任何的索引。
    (2)如果你的数据量是百万级别的,并且没有任何的事务处理,那么用MyISAM是性能最好的选择。
    (3)InnoDB表的大小更加的大,用MyISAM可省很多的硬盘空间。
    在我们测试的这个38w的表中,表占用空间的情况如下:
    引擎类型 MyISAM InnoDB
    数据 53,924 KB 58,976 KB
    索引 13,640 KB 21,072 KB
    占用总空间 67,564 KB 80,048 KB

        另外一个176W万记录的表, 表占用空间的情况如下:
            引擎类型                MyIsam               InnorDB
            数据                   56,166 KB           90,736 KB
            索引                   67,103 KB           88,848 KB
            占用总空间            123,269 KB           179,584 KB
    

    相关文章

      网友评论

        本文标题:mysql存储引擎InnoDB和MyISAM如何选择

        本文链接:https://www.haomeiwen.com/subject/yzxhzxtx.html