mysql基础-架构篇

496 阅读3分钟

这是我参与8月更文挑战的第1天,活动详情查看:8月更文挑战

描述

MySQL与众不同主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离

mysql的系统架构

construct.png

连接层

连接层是mysql架构的最上层,主要包含一些客户端和连接服务,作用如下

  • 完成一些类似连接处理、授权认证以及相关安全方案
  • 引入线程池的概念,为通过认证安全连接的客户端提供线程
  • 可以基于SSL的安全连接,服务器也会为安全接入的客户端验证它所有的操作权限

服务层

服务层是mysql架构的第二层,其作用如下

  • 完成大部分的核心服务功能,包括查询解析、分析、优化、缓存、以及所有的内置函数
  • 所有跨存储引擎的功能也在这一层实现,包括触发器、存储过程、视图等;

引擎层

引擎层是mysql的第三层,作用如下

  • 存储引擎真正的负责mysql中数据的存储和提取
  • 服务器通过API与存储引擎进行通信
  • 不同的存储引擎具有的功能不同,实际应用中可以按需选取

存储层

该层是mysql架构的最底层,主要作用是架构数据存储在运行与该设备的文件系统之上,并完成与存储引擎的交互

存储引擎

描述

存储引擎是mysql的组件,用于处理不同类型的sql操作,一个数据库中多个表可以使用不同的存储引擎满足各种性能和实际需求

存储引擎的相关操作

查看存储引擎

  • 查看支持的存储引擎
show engines;
  • 查看默认的存储引擎
show variables like %storage_engine%;
  • 查看某个表中的存储引擎
show table status like 'tablename';

设置存储引擎

  • 建表时指定存储引擎(默认的就是INNODB,不需要设置)
create table tabel_name engine = INNODB;
  • 修改存储引擎
alter table table_name engine = INNODB;
  • 修改默认存储引擎,也可以在配置文件my.cnf中设置
SET default_storage_engine=NDBCLUSTER;

存储引擎MyISAM和InnoDB的对比

  1. InnoDB支持事务;MyISAM不支持事务;
  2. InnoDB支持外键;MyISAM不支持外键;对一个包含外键的InnoDB表转换为MyISAM表会失败;
  3. InnoDB是聚簇索引,MyISAM是非聚簇索引
  4. InnoDB不保存具体的表行数,执行select count(*) from table时候需要全表扫描;MyISAM用一个变量保存了整个表的行数,执行count操作读出该变量的值就可以,速度非常快
  5. InnoDB最小粒度锁是行锁,适合高并发;MyISAM最小粒度锁是表锁,不适合高并发,一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞,因此并发访问受限
  6. InnoDB不仅缓存索引还缓存真实数据,对内存要求较高,内存大小对性能有决定性的影响;MyISAM只缓存索引,不缓存真实数据;
  7. InnoDB表占用空间大,MyISAM表占空间小
  8. InnoDB关注点在事务,MyISAM关注点在性能