黑马程序员技术交流社区
标题:
引擎知多少---进阶
[打印本页]
作者:
学python的排骨
时间:
2019-8-16 09:49
标题:
引擎知多少---进阶
二、
有哪些引擎?分别具有什么特点(如何选择)?如何切换引擎?
2-1:存储引擎有哪些
存储引擎主要有: 1. MyIsam , 2. InnoDB, 3. Memory, 4. Blackhole, 5. CSV, 6. Performance_Schema, 7. Archive, 8. Federated , 9 Mrg_Myisam
2-2:各自的特点、比较。
a. 简单描述各个引擎的特性
1. MyIsam:这种存储引擎在创建表的时候,会创建三个文件,一个是.frm文件用于存储表的定义,一个是.MYD文件用于存储表的数据,另一个是.MYI文件,存储的是索引。 操作系统对大文件的操作是比较慢的,这样将表分为三个文件,那么.MYD这个文件单独来存放数据自然可以优化数据库的查询等操作。 特点:不支持事务、外键;查询速度快、对表加锁;所以不擅长添加和修改数据。 2. InnoDB:是一个事务型的存储引擎,有行级锁定和外键约束,支持事务,适合并发,可以从灾难中恢复(通过bin-log日志等), 唯一支持外键,支持自动增加列属性auto_increment。3. Memory(HEAP):采用的逻辑介质是内存,响应速度应该是很快的,但是当mysqld守护进程崩溃的时候数据会丢失(因为存在内存中), 另外,要求存储的数据是数据长度不变的格式,比如,Blob和Text类型的数据不可用(长度不固定的) 4. Blackhole:“黑洞”存储引擎,他会丢弃所有的插入的数据,服务器会记录下Blackhole表的日志,所以可以用于复制数据到备份数据库 使用场景:1)验证dump file语法的正确性; 2)以使用blackhole引擎来检测binlog功能所需要的额外负载 3)充当日志服务器 5. CSV: 可以将scv文件作为MySql的表来使用,但是不支持索引。CSV引擎表所有的字段都必须为非空的,创建的表有两个一个是CSV文件和CSM文件。 6. Performance_Schema: MySQL5.5以后新增了一个存储引擎,他主要是用来收集数据库服务器的性能参数。MySQL用户不能创建存储该类型的表。 他提供了以下的功能: 1. 提供进程等待的详细信息,包括锁、互斥变量、文件信息。 2. 保存历史的事件汇总信息,为Mysql服务器的性能做出详细的判断。 3. 对于新增和删除监控时间点都非常容易,并可以随意的改变Mysql服务器的监控周期 需要在配置文件my.cnf中进行配置才能开启。 7. Archive:归档的意思,仅仅支持插入和查询两种功能,在MySQL5.5以后支持索引功能,他拥有很好的压缩机制,使用zlib压缩库,在记录请求的时候实时的进行压缩, 经常被用来作为仓库使用。适合存储大量的独立的作为历史记录的数据。拥有很高的插入速度但是对查询的支持较差。
8.Federated:存储引擎是访问MySQL服务器的一个代理,尽管该引擎看起来提供了一个很好的跨服务器的灵活性,但是经常带来问题,默认是禁用的。 9.Mrg_Myisam:是一组MyIsam的组合,也就是说,他将MyIsam引擎的多个表聚合起来,但是他的内部没有数据,真正的数据依然是MyIsam引擎的表中,但是可以直接进行查询、删除更新等操作。
三、 目前最常用的是MyIsam , InnoDB,我们需要对这两种引擎做一个深入比较
1. MySQL默认引擎:5.5以前是MyIsam , 5.5之后默认引擎是InnoDB2. 区别: 2-1:事务:InnoDB支持事务,MyISAM不支持 2-2:外键: (1). InnoDB支持外键 (2). MyISAM不支持。所以:对一个包含外键的InnoDB表转为MYISAM会失败; 2-3:存放索引的方式: (1). InnoDB是聚集索引. 数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。 因此,主键不应该过大,因为主键太大,其他索引也都会很大。 (2). MyISAM是非聚集索引,数据文件是分离的, 索引保存的是数据文件的指针。主键索引和辅助索引是独立的。 2-4:查询具体行数的差异 (1). InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。 (2). MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快; 2-5:全文索引 (1). Innodb不支持全文索引 (2). MyISAM支持全文索引,查询效率上MyISAM要高于Innodb; 2-6:InnoDB支持行级锁,而MyISAM支持表级锁; 2-7:InnoDB支持MVCC,而MyISAM不支持; 2-8:InnoDB不能通过直接拷贝表文件的方法拷贝表到另外一台机器, myisam 支持; 2-9:InnoDB表支持多种行格式, myisam 不支持; 2-10:InnoDB是索引组织表, myisam 是堆表;
3. 如何合理的选择引擎: 3-1. 是否要支持事务,如果要请选择innodb,如果不需要可以考虑MyISAM 3-2. 如果表中绝大多数都只是读查询,可以考虑MyISAM,如果既有读写也挺频繁,请使用InnoDB。 3-3. 系统崩溃后,MyISAM恢复起来更困难,能否接受; 3-4. MySQL5.5版本开始Innodb已经成为Mysql的默认引擎(之前是MyISAM),说明其优势是有目共睹的,如果你不知道用什么,那就用InnoDB。
四:基本操作
1. 修改
1. 修改配置文件my.ini 将mysql.ini另存为my.ini,在[mysqld]后面添加default-storage-engine=InnoDB,重启服务,数据库默认的引擎修改为InnoDB 2. 在建表的时候指定create table mytbl( id int primary key, name varchar(50) )type=MyISAM;3. 建表后更改alter table table_name type = InnoDB; 旧alter table table_name engine = 'MyISAM'; engine(旧版为type)
2. 查看
1. 查看现在已提供什么存储引擎:show engines;2. 看你的mysql当前默认的存储引擎:mysql> show variables like '%storage_engine%';3. 你要看某个表用了什么引擎 (在显示结果里参数engine后面的就表示该表当前用的存储引擎):mysql> show create table 表名;
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2