mysql零距离接触-存储引擎

咱们先下图看看MySQL总体逻辑架构(MySQL’s Logical Architecture)mysql

                      图1 sql

第一层,即最上一层,所包含的服务并非MySQL所独有的技术。它们都是服务于C/S程序或者是这些程序所须要的 :链接处理,身份验证,安全性等等。数据库

第二层值得关注。这是MySQL的核心部分。一般叫作 SQL Layer。在 MySQL据库系统处理底层数据以前的全部工做都是在这一层完成的,包括权限判断, sql解析,行计划优化, query cache 的处理以及全部内置的函数(如日期,时间,数学运算,加密)等等。各个存储引擎提供的功能都集中在这一层,如存储过程,触发器,视 图等。缓存

第三层包括了存储引擎。一般叫作StorEngine Layer ,也就是底层数据存取操做实现部分,由多种存储引擎共同组成。它们负责存储和获取全部存储在MySQL中的数据。就像Linux众多的文件系统 同样。每一个存储引擎都有本身的优势和缺陷。服务器是经过存储引擎API来与它们交互的。这个接口隐藏 了各个存储引擎不一样的地方。对于查询层尽量的透明。这个API包含了不少底层的操做。如开始一个事 物,或者取出有特定主键的行。存储引擎不能解析SQL,互相之间也不能通讯。仅仅是简单的响应服务器 的请求。安全

链接管理和安全服务器

在服务器内部,每一个client链接都有本身的线程。这个链接的查询都在一个单独的线程中执行。这些线程轮流运行在某一个CPU内核(多核CPU)或者CPU中。服务器缓存了线程,所以不须要为每一个client链接单首创建和销毁线程 。数据结构

当clients(也就是应用程序)链接到了MySQL服务器。服务器须要对它进行认证(Authenticate)。认证是基于用户名,主机,以及密码。对于使用了SSL(安全套接字层)的链接,还使用了X.509证书。clients一链接上,服务器就验证它的权限 (如是否容许客户端能够查询world数据库下的Country表的数据)。架构

优化和执行并发

MySQL会解析查询,并建立了一个内部数据结构(解析树)。而后对其进行各类优化。这些优化包括了,查询语句的重写,读表的顺序,索引的选择等等。用户能够经过查询语句的关键词传递给优化器以便提示使用哪一种优化方式,这样即影响了优化器的优化方式。另外,用户也能够请求服务器给出优化过程的各类说明,以获知服务器的优化策略,为用户提供了参数基准,以便用户能够重写查询,架构和修改相关服务器配置,便于mysql更高效的运行。函数

优化器并是不关心表使用了哪一种存储引擎,可是存储引擎对服务器优化查询的方式是有影响的。优化器须要知道存储引擎的一些特性:具体操做的性能和开销方面的信息,以及表内数据的统计信息。例如,存储引擎支持哪些索引类型,这对于查询是很是有用的。

在解析查询以前,要查询缓存,这个缓存只能保存查询信息以及结果数据。若是请求一个查询在缓存 中存在,就不须要解析,优化和执行查询了。直接返回缓存中所存放的这个查询的结果。

一,简介

(1)MySQL能够将数据以不一样的技术存储在文件(内存)中,这种技术就成为存储引擎。
每种存数引擎使用不一样的存储机制、索引技巧、锁定水平,最终提供普遍且不一样的功能。
(2)使用不一样的存储引擎也能够说不一样类型的表
(3)MySQL支持的存储引擎
1. MyISAM
2. InnoDB
3. Memory
4. CSV
5. Archive

二,并发控制

并发控制:
(1)当多个链接对记录进行修改时保证数据的一致性和完整。
(2)
1. 共享锁(读锁) : 在同一段时间段内,多个用户能够读取同一个资源,读取过程当中数据不会发生任何变化
2. 排他锁(写锁) :在任什么时候候只能有一个用户写入资源,当进入写锁时会阻塞其余的读锁或者写锁操做。
锁颗粒:
表锁:是一种开销最小的锁策略
行锁:是一种开销最大的锁策略,能提供最大的并发操做

三,事务处理

事务处理:整个过程每个单元所有完成才算事务处理成功,某一个单元失败事务就会回滚.
主要做用:保证数据库的完整性
事务的特性:
原子性、一致性、隔离性、持久性
简称:A(Atomic)C(Consistency)I(Isolation)D(Durable)

四种隔离级别:

未提交读(read uncommited):事务中修改,即便没有提交,其余事务也是可见的--脏读

提交读(read commited):一个事务开始时只能看到已经提交的修改,事务从开始到提交以前,所做的改动其余事务不可见--不可重复读

可重复读(repeated read):同一个事务中屡次读取一样记录结果一致--幻读

可串行化(serializable):加锁强制事务串行化-争锁,超时

四,索引

索引:相似目录,是对数据表中一列或多列的值进行排序的一种结构,方便快速查找到数据

五,各个存储引擎特色

使用最多的:MyISAM,InnoDB
CSV存储引擎:以逗号为分隔符,不支持索引;
BlackHole:黑洞引擎,写入的数据都会消失,通常用于作数据复制的中继;
MyISAM:适用于事务的处理很少的状况;
InnoDB:适用于事务处理比较多,须要有外键支持的状况。

六,选择合适引擎

从大部分状况innodb是合适的

1,若是须要事务支持,那么innodb是最稳定的,若是不须要,主要是select和insert用myisam,通常日志应用使用

2,如能够按期关闭服务备份,备份因素不考虑,不然使用innodb,支持在线热备份

3,myisam崩溃后损坏概率大,innodb恢复速度快

4,特有性质:如只有myisam支持地理空间搜索


七,设置存储引擎

(1)经过修改MySQL配置文件实现 default-storage-engine = engine (2)经过建立数据表命令实现 CREATE TABLE table_name(\ ... ) ENGINE = engine; (3)经过修改数据表命令实现 ALTER TABLE table_name ENGINE [=] engine_name;  例如: ALTER TABLE tp1 ENGINE = InnoDB;