- 什么是存储引擎
. 关系数据库表是用于存储和组织信息的数据结构,可以将表理解为由行和列组成的表格,类似于Excel的电子表格的形式。有的表简单,有的表复杂,有的表根本不用来存储任何长期的数据,有的表读取时非常快,但是插入数据时去很差;而我们在实际开发过程中,就可能需要各种各样的表,不同的表,就意味着存储不同类型的数据,数据的处理上也会存在着差异,那么。对于MySQL来说,它提供了很多种类型的存储引擎,我们可以根据对数据处理的需求,选择不同的存储引擎,从而最大限度的利用MySQL强大的功能。
. MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。
1. MyISAM
MyISAM表是独立于操作系统的,这说明可以轻松地将其从Windows服务器移植到Linux服务器;每当我们建立一个MyISAM引擎的表时,就会在本地磁盘上建立三个文件,文件名就是表明。例如,我建立了一个MyISAM引擎的tb_Demo表,那么就会生成以下三个文件1.tb_demo.frm,存储表定义;
2.tb_demo.MYD,存储数据;
3.tb_demo.MYI,存储索引。
MyISAM表无法处理事务,这就意味着有事务处理需求的表,不能使用MyISAM存储引擎。
MyISAM存储引擎特别适合在以下几种情况下使用:
1.选择密集型的表。MyISAM存储引擎在筛选大量数据时非常迅速,这是它最突出的优点。
2.全文索引
不支持事物和行级锁。数据以紧密的格式存储。
- InnoDB
InnoDB是一个健壮的事务型存储引擎,这种存储引擎已经被很多互联网公司使用,为用户操作非常大的数据存储提供了一个强大的解决方案。我的电脑上安装的MySQL5.6.13版,InnoDB就是作为默认的存储引擎。InnoDB还引入了行级锁定和外键约束,在以下场合下,使用InnoDB是最理想的选择:
1.更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求。
2.事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。
3.自动灾难恢复。与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。
4.外键约束。MySQL支持外键的存储引擎只有InnoDB。
5.支持自动增加列AUTO_INCREMENT属性
6.热备份。
InnoDB采用MVCC来支持高并发,默认隔离级别是repeatable read。
InnoDB表是基于聚餐索引建立的。
- InnDB默认级别是可重复读,通过间隙锁策略防止幻读的出现。
3.MEMORY
使用MySQL Memory存储引擎的出发点是速度。为得到最快的响应时间,采用的逻辑存储介质是系统内存。虽然在内存中存储表数据确实会提供很高的性能,但当mysqld守护进程崩溃时,所有的Memory数据都会丢失。获得速度的同时也带来了一些缺陷。它要求存储在Memory数据表里的数据使用的是长度不变的格式,这意味着不能使用BLOB和TEXT这样的长度可变的数据类型,VARCHAR是一种长度可变的类型,但因为它在MySQL内部当做长度固定不变的CHAR类型,所以可以使用.采用的表级锁,不适合大并发插入。
一般在以下几种情况下使用Memory存储引擎:
- 1.目标数据较小,而且被非常频繁地访问。在内存中存放数据,所以会造成内存的使用,可以通过参数max_heap_table_size控制Memory表的大小,设置此参数,就可以限制Memory表的最大大小。
- 2.如果数据是临时的,而且要求必须立即可用,那么就可以存放在内存表中。
- 3.存储在Memory表中的数据如果突然丢失,不会对应用服务产生实质的负面影响。
- 4.用于查找或者映射的表,如邮编和州
Memory同时支持散列索引和B树索引。B树索引的优于散列索引的是,可以使用部分查询和通配查询,也可以使用<、>和>=等操作符方便数据挖掘。散列索引进行“相等比较”非常快,但是对“范围比较”的速度就慢多了,因此散列索引值适合使用在=和<>的操作符中,不适合在<或>操作符中,也同样不适合用在order by子句中。
4.MERGE
MERGE存储引擎是一组MyISAM表的组合,这些MyISAM表结构必须完全相同,尽管其使用不如其它引擎突出,但是在某些情况下非常有用。说白了,Merge表就是几个相同MyISAM表的聚合器;Merge表中并没有数据,对Merge类型的表可以进行查询、更新、删除操作,这些操作实际上是对内部的MyISAM表进行操作。Merge存储引擎的使用场景。
5.ARCHIVE
Archive是归档的意思,在归档之后很多的高级功能就不再支持了,仅仅支持最基本的插入和查询两种功能。在MySQL5.5版以前,Archive是不支持索引,但是在MySQL 5.5以后的版本中就开始支持索引了。Archive拥有很好的压缩机制,它使用zlib压缩库,在记录被请求时会实时压缩,所以它经常被用来当做仓库使用。每次select查询是全部扫描。
适合场所:1.适合日志和数据采集类应用。2.支持行级锁和专用的缓冲区,可以实现高并发插入。
6.CSV引擎
可以将普通的csv文件作为mysql的表进行处理,但不支持索引。可以进行数据的拷入和烤出。
7.Federated引擎
federated引擎是访问其他Mysql服务器的一个代理,创建远程mysql服务器的客户端连接。
8.如何查看服务器上有哪些收索引擎
show engines;
9.如何选择合适的存储引擎
(1)选择标准可以分为:
(2)是否需要支持事务;
(3)是否需要使用热备;
(4)崩溃恢复:能否接受崩溃;
(5)是否需要外键支持;
10.转换表的引擎
- alter table mytable engine=Inndb
优点:适用任何存储引擎
缺点:执行时间长,按行复制,消耗IO。
导入与导出
使用mysqldump工具导出,并修改创建表语句时候的存储引擎。创建与插入
使用insert….select 语句
11.全文索引
全文索引通常是由倒排索引来实现,也是一种索引结构。它在辅助表中存储了单词与单词自身一个或对个文档中所在位置之间的映射,通常通过关联数组实现。
2中表现形式:1.inverted file index{单词,单身所在文档的ID}
2.full inverted index{单词,(单词所在文档的ID,在具体文档中的位置)}
在全文检索的标准,有两列,一个是word字段,一个是ilist字段,并且在word字段上设有索引。
语法:通过match()…AGAINST()语法支持全文检索的查询,match指定了需要被查询的列,AGAINST指定了使用何种方法进行查询。