mysql零距离接触-存储引擎

我们先下图看看MySQL整体逻辑架构(MySQL’s Logical Architecture)

                      图1 

第一层,即最上一层,所包含的服务并不是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;

转载于:https://my.oschina.net/u/3152390/blog/810753

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值