A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 学python的排骨 中级黑马   /  2019-8-16 09:49  /  1832 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

二、有哪些引擎?分别具有什么特点(如何选择)?如何切换引擎?

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 表名;




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马