深入了解Mysql逻辑架构
作者:晴转阵雨 发布时间:2024-01-24 21:38:58
Mysql现在是大多数公司企业在用的数据库,之所以用Mysql,一点是因为Mysql是开源软件,一些有能力的公司会基于已有的Mysql架构,进行修改、调整改成适合自己公司的业务需要。
一点是因为Mysql免费,相对昂贵的Oracle服务,对于很多刚起步的公司来说,是最适合不过的数据库了。
之所以要认识Mysql的逻辑架构,就好比我们自己在做开发时,首先需要先掌握自己系统用的分层架构,这样在开发的过程中,如果有哪个环节产生问题,就很好排查。认识Mysql的逻辑架构也同理,我们在用Mysql的时候,我们不清楚它什么时候会出现问题,但是当出现问题时(比如优化查询sql,要从哪一步开始),我们可以更清楚的定位问题。
1.Connections 连接器
我们连接Mysql的服务作为客户端连接Mysql服务端,Mysql可以连接各个编程语言平台
2.系统管理和控制工具(Management Serveices & Utilities)
作为Mysql服务的管理和控制工具,比如备份、还原、复制、集群等
3.连接池(Connection Pool)
连接池的主要功能是提供连接认证、线程复用、连接数限制等
4.SQL Interface(SQL接口)
这里主要是接收Mysql 的DML、DDL语句,以及存储过程、视图、触发器等
5.Parse(解析器)
这里主要的对传过来的sql字符串进行解析,比如我们一开始接触的jdbc编程,就是将字符串类型的sql语句发送到mysql里,然后解析器首先对sql语句进行词法分析,形成语法树,接着再对语法树进行语法分析,看各个分词是否符合SQL92标准,符合的话再执行下一环节业务处理。
6.查询优化器(Optimizer)
查询优化器根据传过来的SQL语句,进行分析判断是否是最优的执行语句,主要针对一下三个方面进行分析:
* 使用哪一个索引(一个表有若干个索引,选择过滤力度最大的那个)
* 多表关联的表连接顺序
* WHERE条件的先后顺序(根据MYSQL最左前缀原则,会重新摆放条件顺序)
7.查询缓存(Cache&Buffer)
MYSQL会将每一条SQL进行hash处理后将hash值放到一个map中,每次有SQL来时先计算SQL的hash值,比较是否相同,相同的话可以执行内存的SQL,而不必对新的SQL语句进行解析、优化等操作,加快执行效率。
8.存储引擎(Pluggable Storage Engines)
MSQL的存储引擎支持可插拔特性,即用户可随意替换想用的存储引擎,也可以自定义自己的存储引擎,这里主要针对INNODB、MYISAM存储引擎进行分析比较。
平时涉及到存储引擎的选型,主要针对业务的需要来选择,可以参考各自的特点。
存储引擎的选型:
InnoDB:
支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。
MyISAM:
插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比 较低,也可以使用。
MEMORY:
所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,不需要持久保存,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。
这里有一张MYSQL的简单执行流程图,凭靠这张图对MYSQL整体的一个执行流程会有清晰的认识。
MYSQL的逻辑架构就介绍到这里。当然MYSQL还有对应的物理架构,不过这一块主要涉及到MYSQL的各个日志文件,以及各个表的数据文件以及索引文件,在后面的章节再做介绍。
来源:https://www.cnblogs.com/process-h/p/13987069.html


猜你喜欢
- 虽然以前我写过IE6、IE7、IE8共存的解决方案,但是看到IETester这个软件以后那些都已经没有意义了(那些办法副作用比较大,而且实现
- Python语言的崛起让大家对web、爬虫、数据分析、数据挖掘等十分感兴趣。数据挖掘就业前景怎么样?关于这个问题的回答,大家首先要知道什么是
- 一. 代码使用Python+Splinter开发,Splinter是一个使用Python开发的开源Web应用测试工具,它可以帮你实
- 本文实例讲述了javascript中createElement的两种创建方式。分享给大家供大家参考。具体实现方法如下:<html xm
- Redis持久化机制实现原理是什么?流程是什么?持久化就是把内存中的数据存放到磁盘中,防止宕机后内存数据丢失。按照指定的时间间隔内将内存的数
- 本文详细分析了smarty缓存的用法。分享给大家供大家参考。具体分析如下:一开始以为smarty只是用来做一些掩饰php代码功能,但是后来才
- msxml3.dll 错误 '80004005'未指定的错误/Project/lijiang_071017/include/
- 1,下载Yii,站点:http://www.yiiframework.com/download/注意版本,这里是根据Yii1来的,如果是Yi
- 本文实例讲述了python循环监控远程端口的方法。分享给大家供大家参考。具体如下:在ip.txt中每行一个ip地址和端口号,代码可循环监控这
- vue后台返回base64图片无法显示关于后台接口返回的图片base64格式页面无法显示的问题,我遇到的原因是因为返回的一串内容里面存在空格
- 本文实例讲述了JS 事件机制。分享给大家供大家参考,具体如下:<html> <head>
- 如下所示:#!/usr/bin/env python3.5import psutilimport mysql.connectorimport
- 这一版,对虹软的功能进行了一些封装,添加了人脸特征比对,比对结果保存到文件,和从文件提取特征进行比对,大体功能基本都已经实现,可以进行下一步
- 问:如何让内联框架里面的网页背景透明?(用iframe嵌套一网页,怎么能够设置其背景为透明以便能显示父框架中网页的背景图?)答:这是需要 I
- 用wrapper封装这样在对象内外都可以访问function MapPool(){ function createMarker(n
- PHP convert_cyr_string() 函数实例把字符串由一种字符集转换成另一种:<?php $str = "He
- 自去年以来,我们正在开发区块链(Blockchain)业务。最近使用过Ethereum并使用PHP,所以我想我们应该聊聊这个话题。这里有个前
- 之前也写过这个小组件,最近遇到select下加搜索的功能,所以稍微完善一下。效果图:子组件 dropdown.vue<template
- 运维平台导入数据这一功能实在是太重要了,我敢说在没有建自己的cmdb平台前,大多数公司管理服务器信息肯定是表格,用表格最麻烦的就是有点更新就
- 作者:Robert Lair and Jason Lefebvr Intensity Software, Inc.