17 mysql-框架、存储引擎
1 框架
架构图如下:
连接驱动:每当一个客户端连接MySQL服务器的时候,服务器都会执行认证。认证基于用户名,客户端主机和客户端用户密码。客户端连上MySQL服务器以后,服务器会检查客户端是否有权限发起特定的请求。
缓存:查询缓存保存了SELECT语句的完整结果集。在解析查询之前,MySQL服务器先找查询缓存。如果客户端发起的查询与缓存中的完全一致,服务器就简单地跳过解析、优化甚至执行,它直接就从缓存中把输出显示出来。相关参数配置如下:
query_cache_type: 是否打开缓存 ,OFF关闭;ON打开;DEMAND明确写了SQL_CACHE的查询才会缓存
query_cache_size: 缓存使用的总内存空间大小,单位是字节,这个值必须是1024的整数倍。
query_cache_min_res_unit: 分配内存块时的最小单位大小
query_cache_limit: MySQL能够缓存的最大结果,如果超出,则增加 Qcache_not_cached的值,并删除查询结果
query_cache_wlock_invalidate: 如果某个数据表被锁住,是否仍然从缓存中返回数据,默认是OFF,表示仍然可以返回
解析器:sql请求发送到server端,需要经过解析器生成内部的数据结构对象,以方便进行优化和生成执行计划
优化器:创建了内部解析树之后,MySQL运用了多种优化技术。这些技术可能包括,查询重写,扫描表的顺序以及选择合适的索引
2 存储引擎
InnoDB和MyISAM是最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。
2.1 MyISAM
优点:
插入速度快
使用B tree索引
支持FUULTEXT全文索引
count(*)的速度很快
磁盘空间占用较少
缺点:
不支持事务
不支持外键
表级别锁定
有持久性问题,表崩溃可能需要冗长的修复操作才能使其回复联机
2.2 InnoDB
优点:
支持事务
全ACID支持(原子性,一致性,隔离性,持久性)
支持MVCC,多版本并发控制
行级锁,并发写入同一表的不同行不会被序列化
支持外键
主键支持使用集群索引
提高了应用程序在高负载,大量连接下的并发能力
缺点:
InnoDB对磁盘空间的使用是MyISAM的3倍以上
count(*)的速度大大降低
一些简单查询表单的速度低于MyISAM,但是复杂的,多个表的查询速度则超过MyISAM