zoukankan      html  css  js  c++  java
  • mysql引擎问题研究

    mysql引擎问题研究

    数据库引擎

    缺省情况下,MYSQL支持三个引擎:ISAM,MYISAM和HEAP。还存在MYSQL+API的引擎例如InnoDB。

    数据库引擎特点

    ISAM:执行读取操作速度很快,且不占用大量内存和存储资源。不足之处在于,不知此食物,不能够容错。硬盘崩溃,数据文件无法恢复。不支持事务。

    MyISAM:ISAM的扩展。扩展了索引和字段管的大量功能。使用了表格锁定机制,来优化并发的读写操作,需要经常使用优化表命令,来恢复被更新机制所浪费的空间。强调快速读取操作。缺陷是,不能够在表损坏后恢复数据。不支持事务。

    HEAP:允许只驻留在内存里的临时表格。所以速度比ISAM和MYISAM速度更快,但是数据不稳定,如果在关机之前没有进行保存,数据就会丢失。用完表格之后删除。

    InnoDB:MYSQL+API。存在事务支持和外来键问题。比ISAM和MYISAM引擎慢。

    MyISAM和InnoDB的区别

    基本的区别是,MYISAM不存在事务,二InnoDB支持事务。MyISAM表主要强调性能,速度比InnoDB类型更快,但不支持事务,而InnoDB支持事务,外键等高级数据库功能。

    细节

    1.InnoDB不支持FULLTEXT类型的索引。

    2.InnoDB不保存表的具体行数,执行select count(*) from table时,InnoDB要扫描整个表来计算,在MYISAM只是读取保存好的行数。在执行语句count(*)中包含where语句时,两种表操作一样。

    3.对于AUTO_INCREMENT(自动增长)类型,InnoDB中必须包含该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。

    4.DELETE FROM table 时,InnoDB不会重新建立表,而是一行一行删除。

    5.LOAD TABLE tablename FROM MASTER操作对InnoDB不起作用。LOAD TABLE FROM MASTER仅对于MyISAM表起作用。用于把表的拷贝从主服务器转移到从属服务器。要求用于连接主服务器的帐户拥有对主服务器的RELOAD和SUPER权限以及SELECT权限。

    另外,InnoDB表的行锁也不是绝对的。例如,update table set num=1 where name like “a%”,将会锁全表。

    两种类型最主要的差别就是Innodb支持事务处理与外键和行级锁.而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用。

    注:

    1.事务可以在逻辑业务层控制。

    2.MyISAM的索引与数据分开,并且有压缩,内存的使用率对应提高了不少,可以加载更多的索引。InnoDB的索引是紧密捆绑,没有使用压缩,体积比MyISAM庞大。

    3.对于数据的导入导出有很大的影响。数据量很大的情况下,不适合导出sql。MyISAM的话很方便,只要发给他们对应那表的frm.MYD,MYI的文件,让他们自己在对应版本的数据库启动就行,而Innodb就需要导出xxx.sql了,因为光给别人文件,受字典数据文件的影响,对方是无法使用的。

    4.select count(*) 和order by频繁使用,而这种操作Innodb其实也是会锁表的。很多人以为Innodb是行级锁,那个只是where对它主键是有效,非主键的都会锁全表的。

    5.如果和MyISAM比insert写操作的话,Innodb还达不到MyISAM的写性能。如果是针对基于索引的update操作,虽然MyISAM可能会逊色Innodb,但是那么高并发的写,从库能否追的上也是一个问题,还不如通过多实例分库分表架构来解决。

    使用

    MyISAM适合:

    (1)做很多count 的计算;

    (2)插入不频繁,查询非常频繁;

    (3)没有事务。

    InnoDB适合:

    (1)可靠性要求比较高,或者要求事务;

    (2)表更新和查询都相当的频繁,并且表锁定的机会比较大的情况指定数据引擎的创建
    让所有的灵活性成为可能的开关是提供给ANSI SQL的MySQL扩展——TYPE参数。MySQL能够让你在表格这一层指定数据库引擎,所以它们有时候也指的是table formats。

    其他

    MyISAM表中每个表被存在分离的文件中。InnoDB 表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上。InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。

  • 相关阅读:
    JSP——useBean
    jsp 几种跳转
    jsp MIME
    T-SQL之触发器(下)
    T-SQL之触发器
    T-SQL之存储过程
    T-SQL之游标
    T-SQL之自定义函数
    T-SQL之函数
    T-SQL复习心得(1)变量
  • 原文地址:https://www.cnblogs.com/mr-cc/p/5658727.html
Copyright © 2011-2022 走看看