文章目录

  • Mysql体系架构
    • 体系
      • 连接层
      • SQL处理层
      • 缓存
      • 解析查询
      • 优化
      • 逻辑架构
      • 物理存储结构
        • 数据库
        • 表文件
        • mysql utilities 安装
    • 存储引擎
      • MyISAM
        • 表压缩
        • 适用场景:
      • Innodb
      • CSV
      • Archive
      • Memory
        • 特点
      • 与临时表的区别
      • 使用场景
      • Ferderated

前文-MysqlJSON类型

Mysql体系架构

体系

连接层


当 MySQL 启动(MySQL 服务器就是一个进程),等待客户端连接,每一个客户端连接请求, 服务器都会新建一个线程处理(如果是线程池的话,则是分配一个空的线程),每个线程独 立,拥有各自的内存处理空间

最大连接数

show VARIABLES like '%max_connections%'


连接到服务器,服务器需要对其进行验证,也就是用户名、IP、密码验证,一旦连接成功, 还要验证是否具有执行某个特定查询的权限(例如,是否允许客户端对某个数据库某个表的 某个操作)

SQL处理层


这一层主要功能有:SQL 语句的解析、优化,缓存的查询,MySQL 内置函数的实现,跨存储 引擎功能(所谓跨存储引擎就是说每个引擎都需提供的功能(引擎需对外提供接口)),例如: 存储过程、触发器、视图等。

  • 1.如果是查询语句(select 语句),首先会查询缓存是否已有相应结果,有则返回结果,无则 进行下一步(如果不是查询语句,同样调到下一步)
  • 2.解析查询,创建一个内部数据结构(解析树),这个解析树主要用来 SQL 语句的语义与语 法解析;
  • 3.优化:优化 SQL 语句,例如重写查询,决定表的读取顺序,以及选择需要的索引等。这一
    阶段用户是可以查询的,查询服务器优化器是如何进行优化的,便于用户重构查询和修改相 关配置,达到最优化。这一阶段还涉及到存储引擎,优化器会询问存储引擎,比如某个操作 的开销信息、是否对特定索引有查询优化等。

缓存

show variables like '%query_cache_type%' #默认不开启
show variables like '%query_cache_size%' #默认值 1M
SET GLOBAL query_cache_type = 1; #会报错
query_cache_type 只能配置在 my.cnf 文件中,这大大限制了 qc 的作用

在生产环境建议不开启,除非经常有 sql 完全一模一样的查询
QC 严格要求 2 次 SQL 请求要完全一样,包括 SQL 语句,连接的数据库、协议版本、字符 集等因素都会影响

解析查询


优化




通过上面的 sql 大概就能看出,一个 sql 并 不一定会去查询物理数据,sql 解析器会通过优化器来优化程序员写的 sql

explain select * from account t where t.id in (select t2.id from account t2)
SHOW WARNINGS;


Message信息:

/* select#1 */
SELECT `mall`.`t`.`id` AS `id`,`mall`.`t`.`name` AS `name`,`mall`.`t`.`balance` AS `balance`
FROM `mall`.`account` `t2` JOIN `mall`.`account` `t` WHERE (`mall`.`t`.`id` = `mall`.`t2`.`id`)

可以看出子查询会被解析器优化成JOIN语句。
tips:面试问子查询和JOIN哪个效率高

逻辑架构

在 mysql 中其实还有个 schema 的概念,这概念没什么太多作用,只是为了兼容其他数据库, 所以也提出了这个。
在 mysql 中 database 和 schema 是等价的

create database demo;
show databases;
drop schema demo;
show databases;

物理存储结构

数据库的数据库(DataDir)
mysql 安装的时候都要指定 datadir,其查看方式为:
show VARIABLES like 'datadir',其规定所有建立的数据库存放位置

数据库

创建了一个数据库后,会在上面的 datadir 目录新建一个子文件夹

表文件

用户建立的表都会在上面的目录中,它和具体的存储引擎相关,但有个共同的就是都有个 frm 文件,它存放的是表的数据格式。

mysqlfrm --diagnostic /usr/local/mysql/data/mall/account.frm

(对应下面的 mysql utilities 安装)

mysql utilities 安装

分享链接
提取码:wdyb

tar -zxvf mysql-utilities-1.6.5.tar.gz
cd mysql-utilities-1.6.5
python ./setup.py build
python ./setup.py install

存储引擎

#查看你的 mysql 现在已提供什么存储引擎:

mysql> show engines;

#看你的 mysql 当前默认的存储引擎:

mysql> show variables like '%storage_engine%';

MyISAM

MySql 5.5 之前默认的存储引擎
MyISAM 存储引擎由 MYD 和 MYI 组成

create table testmysam (
id int PRIMARY key
) ENGINE=myisam
insert into testmysam VALUES(1),(2),(3)

表压缩

myisampack -b -f /usr/local/mysql/data/mall/testmysam.MYI

压缩后再往表里面新增数据就新增不了
insert into testmysam VALUES(1),(2),(3)

压缩后,需要

myisamchk -r -f /usr/local/mysql/data/mall/testmysam.MYI

适用场景:

  • 非事务型应用(数据仓库,报表,日志数据)
  • 只读类应用
  • 空间类应用(空间函数,坐标)
    由于现在 innodb 越来越强大,myisam 已经停止维护
    (绝大多数场景都不适合)

Innodb

  • Innodb 是一种事务性存储引擎
  • 完全支持事务得 ACID 特性
  • Redo Log 和 Undo Log
  • Innodb 支持行级锁(并发程度更高)
show VARIABLES like 'innodb_log_buffer_size'

CSV

  • 以 csv 格式进行数据存储
  • 所有列都不能为 null 的
  • 不支持索引(不适合大表,不适合在线处理)
  • 可以对数据文件直接编辑(保存文本文件内容)
create table mycsv(id int not null,c1 VARCHAR(10) not null,c2 char(10) not null) engine=csv;
insert into mycsv values(1,'aaa','bbb'),(2,'cccc','dddd');

vi /usr/local/mysql/data/mall/mycsv.CSV 修改文本数据

flush TABLES;
select * from mycsv
create index idx_id on mycsv(id)

Archive

  • 组成
    以 zlib 对表数据进行压缩,磁盘 I/O 更少
    数据存储在 ARZ 为后缀的文件中
  • 特点:
    只支持 insert 和 select 操作
    只允许在自增 ID 列上加索引
create table myarchive(id int auto_increment not null,c1 VARCHAR(10),c2 char(10), key(id)) engine = archive;
create index idx_c1 on myarchive(c1);
INSERT into myarchive(c1,c2) value('aa','bb'),('cc','dd');
delete from myarchive where id = 1;
update myarchive set c1='aaa' where id = 1;

Memory

特点

  • 文件系统存储特点 也称 HEAP 存储引擎,所以数据保存在内存中
  • 支持 HASH 索引和 BTree 索引
  • 所有字段都是固定长度 varchar(10) = char(10)
  • 不支持 Blog 和 Text 等大字段
  • Memory 存储引擎使用表级锁
  • 最大大小由 max_heap_table_size 参数决定
show VARIABLES like 'max_heap_table_size'
create table mymemory(id int,c1 varchar(10),c2 char(10),c3 text) engine = memory;
create table mymemory(id int,c1 varchar(10),c2 char(10)) engine = memory;create index idx_c1 on mymemory(c1); create index idx_c2 using btree on mymemory(c2); show index from mymemory show TABLE status LIKE ‘mymemory’

与临时表的区别

使用场景

  • hash 索引用于查找或者是映射表(邮编和地区的对应表)
  • 用于保存数据分析中产生的中间表
  • 用于缓存周期性聚合数据的结果表

Ferderated

  • 提供了访问远程 MySQL 服务器上表的方法
  • 本地不存储数据,数据全部放到远程服务器上
  • 本地需要保存表结构和远程服务器的连接信息

使用场景

  • 偶尔的统计分析及手工查询(某些游戏行业)

默认禁止,启用需要再启动时增加 federated 参数

show ENGINES;
create database local;
create database remote;
create table remote_fed(id int auto_increment not null,c1 varchar(10) not null default '',c2 char(10) not null default '',primary key(id)) engine = INNODB ;
INSERT into remote_fed(c1,c2) values('aaa','bbb'),('ccc','ddd'),('eee','fff');CREATE TABLE `local_fed` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`c1` varchar(10) NOT NULL DEFAULT '',
`c2` char(10) NOT NULL DEFAULT '',
PRIMARY KEY (`id`) ) ENGINE=federated CONNECTION ='mysql://root:root1234%@127.0.0.1:3306/remote/remote_fed'
select * from local_fed;
delete from local_fed where id = 2;select * from remote.remote_fed;

六、Mysql体系架构、存储引擎、临时表相关推荐

  1. 阿里P8架构师谈:MySQL有哪些存储引擎,各自的优缺点,应用场景

    经常面试都会问到MYSQL有哪些存储引擎,以及各自的优缺点.今天主要分享常见的存储引擎:MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(BerkeleyDB)等,以及最常用的 ...

  2. mysql递归查询所有上下节点_【转】MySQL之Spider存储引擎原理详解

    一.概述 Spider是为MySQL/MariaDB开发的一个特殊引擎,具有内嵌分片功能.MariaDB从10.0.4开始支持Spider.作为MariaDB的一个新的主要特性.Spider的主要功能 ...

  3. tablestore列式存储原理_10分钟搞透:技术人必会的MySQL体系结构与存储引擎!

    MySQL是目前使用最广的开源数据库,不管从装机量.使用人群.专职人员.社区发展,还是基于MySQL的其他分支,都是当之无愧的No.1. 本文将从以下4个方面,带你搞透MySQL体系结构与存储引擎. ...

  4. mysql 学习笔记--存储引擎、索引、sq优化

    全面的 mysql学习笔记–通用语法.函数.数据类型.约束.多表查询.事务 全面的 mysql学习笔记–存储引擎.索引.sql优化 全面的mysql学习笔记–视图/存储过程/触发器.锁.InnoDB引 ...

  5. mysql技术innodb存储引擎读后感_《MySQL技术内幕:InnoDB存储引擎》读书笔记.

    一.MySQL 体系架构和存储引擎 1.MySQL 被设计成一个单进程多线程架构的数据库,MySQL 数据库实例在系统上的表现就是一个进程. 2.MySQL 的体系架构,需要特别注意的是,存储引擎是基 ...

  6. mysql的常用存储引擎_MySQL常见的三种存储引擎

    Ok,我们知道了,引擎就是一个程序的核心组件. 简单来说,存储引擎就是指表的类型以及表在计算机上的存储方式. 存储引擎的概念是MySQL的特点,Oracle中没有专门的存储引擎的概念,Oracle有O ...

  7. MySQL技术内幕读书笔记(一)——Mysql体系结构和存储引擎

    目录 MySQL体系结构和存储引擎 定义数据库和实例 MYSQL体系结构 MYSQL存储引擎 MySQL体系结构和存储引擎 定义数据库和实例 数据库:物理操作系统文件或者其他形式文件类型的结合.在MY ...

  8. MySQL高级-(存储引擎、索引、锁)

    MySQL高级 一.MySQL存储引擎 1.MySQL体系结构 体系结构的概念 任何一套系统当中,每个部件都能起到一定的作用! MySQL的体系结构 体系结构详解 客户端连接 支持接口:支持的客户端连 ...

  9. 一文搞懂MySQL体系架构!!

    写在前面 很多小伙伴工作很长时间了,对于MySQL的掌握程度却仅仅停留在表面的CRUD,对于MySQL深层次的原理和技术知识了解的少之又少,随着工作年限的不断增长,职场竞争力却是不断降低的.很多时候, ...

最新文章

  1. 宏定义define的使用
  2. 清空SQL Server日志
  3. nice和taskset命令
  4. Error: Could not find or load main class
  5. 错误之Only one usage of each socket address (protocol/network address/port)解决办法
  6. mysql 页面跳转_Springboot+MyBatis+mysql+jsp页面跳转详细示例
  7. 阿里云oss上传图片
  8. linux msgctl函数,msgctl()函数
  9. Office2010安装出现“错误1907”的解决方法(未验证)
  10. Hercules配置文件HERCULES.CNF范本
  11. ict的终极模式 是软件研发
  12. N70常用软件大集合
  13. 【RFID】RFID的标准体系
  14. 从董明珠称格力将会接入鸿蒙系统,是否可以看出手机圈的不堪?
  15. js-cookie设置token过期时间
  16. 到底什么才是商业智能(BI)?数字化时代你应该了解这些
  17. 初探Meterpreter-emaste_r
  18. 【Oracle数据库驱动架包 ojdbc5.jar ojdbc6.jar】
  19. 流氓软件插件中介商自述黑色淘金路(转)
  20. 微信小程序黑马优购遇到的问题和心得

热门文章

  1. python怎么清空屏幕_python3.6怎么清屏幕
  2. Halcon——使用标定板标定像素当量
  3. [Usaco2008 Mar]River Crossing渡河问题
  4. java中文转Unicode
  5. UDP报文观测以及DNS的工作原理
  6. win10屏蔽自动更新方法
  7. 跟KingDZ学HTML5之八 HTML5之Web Save
  8. 无法将mysql服务器连接到_无法从java连接到mysql服务器
  9. php多表条件排除然后输出,php – 从具有多个要求的两个表中选择值,但仅使用其中一个...
  10. MySQL中实现rownum功能类似的语句