Mysql存储引擎 MyISAM和InnoDB

  • 存储引擎介绍
      Mysql中的数据用各种不同的技术存储在文件(或内存)中。这些技术中的每一个种技术都是用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,能够获得额外的速度或者功能,从而改善应用的整体功能。这些不同的技术以及配套的相关功能在Mysql中被称为存储引擎。最知名的存储引擎为 MyISAM 和 InnoDB。
  • MyISAM特点介绍
      MyISAM是Mysql数据库系统5.5版本之前的默认存储引擎,他的前身是ISAM。ISAM是一个定义明确且历经时间考验的数据表格管理方法。它的读取操作速度很快,而且不占用大量内存和存储资源。

    特点:
    1)不支持事务
    2)表级锁定形式,数据在更新时锁定整个表。
    3)数据库读写过程中相互阻塞。
    4)可以通过key_buffer_size来设置缓存索引
    5)数据单独写入或读取 速度快占用资源少。
    6)不支持外键约束,只支持全文索引。
    7)在每个磁盘上存储成三个文件,文件名均以表的名字开始。
    【 .frm文件存储表定义、数据文件的扩展名:.MYD(MYData)、索引文件的扩展名:MYI(MYIndex) 】

  • InnoDB特点介绍

    1)支持事务,支持四个事务隔离级别。
    2)行级锁定,但是全表扫描仍然会是表级锁定。
    3)读写阻塞与事务隔离级别相关。
    4)具有非常高效的缓存特性,能缓存索引,也能缓存数据。
    5)表与主键以簇的方式存储。
    6)支持分区、表空间,类似Oracle数据库。
    7)支持外键约束。 Mysql5.5以前版本不支持全文索引,5.5版本以后支持。
    8)适合对硬件资源要求比较高的场合。

  • MyISAM与InnoDB的区别
      InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。

  • 设置存储引擎及常用命令
  • 查看数据库可配置的存储引擎类型

    > show engines;
  • 查看正在使用的存储引擎

    > show table status from school where name='info';  
    或
    > use school;   
    > show create table info;
  • 配置存储引擎
  • 1)命令修改

    > use 库;      //进入数据库
    > alter table 表 engine=MyISAM;       //修改存储引擎为MyISAM
    > alter table 表 engine=InnoDB;   
  • 2)修改配置文件my.cnf
  • 修改默认指定引擎 仅对新建的表有效!

    # vim /etc/my.cnf
    ...
    [mysqld]
    default--storage-engine=MyISAM      //添加  或者=InnoDB
    
    3)创建表时直接指定
    > use 库;
    > create table 表名(id int)engine=InnoDB; 
    > create table 表名(id int)engine=MyISAM;
    > show create table 表;   查看
  • 4)批量修改引擎
  • mysql 5.5版本

    # yum -y install perl-DBI
    # yum -y install perl-DBD-MySQL        //安装perl对mysql的操作模版
    # mysql_convert_table_format --host=localhost --user=root --password=123456 --socket=/tmp/mysql.sock --engine=MyISAM 库名 表名1 表名2
    
    ========查找socket的位置 ==== 
         # yum install -y lsof                   
         # lsof | grep mysql | grep sock 
    ========================= 
    
    但是改成InnoDB 会报错需要修改下面配置文件
    # vim /usr/local/mysql/bin/mysql_convert_table_format
        "e|engine|type=s"  => \$opt_engine,   //32行修改为engine,
    然后执行修改的命令
    # mysql_convert_table_format --host=localhost --user=root --password=123456 --socket=/tmp/mysql.sock --engine=InnoDB 库名 表名1 表名2

猜你喜欢

转载自blog.51cto.com/13630803/2136262