`
weitao1026
  • 浏览: 1047548 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

刚开始接触一个新的事物的时候,我觉得很有必要从其工作原理入手,弄清楚这个东西的来龙去脉,为接下来的继续深入学习做好铺垫,掌握好其原理有助于我们从整体上来把握这个东西,并且帮助我们在排错过程中理清思路。接下来,还是从mysql的工作原理开始入手,下面先来一张经典的图:

<iframe id="iframe_0.42570916812323644" style="border: medium; border-image: none; width: 671px; height: 405px;" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://img1.51cto.com/attachment/201308/111054362.png?_=3641983%22%20style=%22border:none;max-width:870px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.42570916812323644',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no"></iframe>

   上面的图就是mysql的内部架构,可以清楚的看到Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的。

 

-+-----------------------------------------------------------------------------------+-

   下面是关于上述部件的介绍:

1. connectors

   与其他编程语言中的sql 语句进行交互,如php、java等。

 

2. Management Serveices & Utilities

   系统管理和控制工具

 

3. Connection Pool (连接池)

管理缓冲用户连接,线程处理等需要缓存的需求

 

 

4. SQL Interface (SQL接口)
接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface

 

5. Parser (解析器)
SQL命令传递到解析器的时候会被解析器验证和解析。
主要功能:
a . 将SQL语句分解成数据结构,并将这个结构传递到后续步骤,后面SQL语句的传递和处理就是基于这个结构的
b.  如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的,语句将不会继续执行下去

 

 

6. Optimizer (查询优化器)
SQL语句在查询之前会使用查询优化器对查询进行优化(产生多种执行计划,最终数据库会选择最优化的方案去执行,尽快返会结果) 他使用的是“选取-投影-联接”策略进行查询。
用一个例子就可以理解: select uid,name from user where gender = 1;
这个select 查询先根据where 语句进行选取,而不是先将表全部查询出来以后再进行gender过滤
这个select查询先根据uid和name进行属性投影,而不是将属性全部取出以后再进行过滤
将这两个查询条件联接起来生成最终查询结果.

 

 

 

7. Cache和Buffer (查询缓存)
如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。
这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等
 

 

8.Engine (存储引擎)

存储引擎是MySql中具体的与文件打交道的子系统。也是Mysql最具有特色的一个地方。

Mysql的存储引擎是插件式的。它根据MySql AB公司提供的文件访问层的一个抽象接口来定制一种文件访问机制(这种访问机制就叫存储引擎)

 

-+-----------------------------------------------------------------------------------+-

 

SQL 语句执行过程

 

   数据库通常不会被直接使用,而是由其他编程语言通过SQL语句调用mysql,由mysql处理并返回执行结果。那么Mysql接受到SQL语句后,又是如何处理的呢?

   首先程序的请求会通过mysql的connectors与其进行交互,请求到处后,会暂时存放在连接池(connection pool)中并由处理器(Management Serveices & Utilities)管理。当该请求从等待队列进入到处理队列,管理器会将该请求丢给SQL接口(SQL Interface)。SQL接口接收到请求后,它会将请求进行hash处理并与缓存中的结果进行对比,如果完全匹配则通过缓存直接返回处理结果;否则,需要完整的走一趟流程:

   (1)由SQL接口丢给后面的解释器(Parser),上面已经说到,解释器会判断SQL语句正确与否,若正确则将其转化为数据结构。

   (2)解释器处理完,便来到后面的优化器(Optimizer),它会产生多种执行计划,最终数据库会选择最优化的方案去执行,尽快返会结果。

   (3)确定最优执行计划后,SQL语句此时便可以交由存储引擎(Engine)处理,存储引擎将会到后端的存储设备中取得相应的数据,并原路返回给程序。

 

这里有几点需要注意:

(1)如何缓存查询数据?

存储引擎处理完数据,并将其返回给程序的同时,它还会将一份数据保留在缓存中,以便更快速的处理下一次相同的请求。具体情况是,mysql会将查询的语句、执行结果等进行hash,并保留在cache中,等待下次查询。

 

(2)buffer与cache的区别?

从上面的图可以看到,缓存那里实际上有buffer和cache两个,那它们之间是否有什么不同呢?简单的说就是,buffer是写缓存,cache是读缓存。

 

(3)如何判断缓存中是否已缓存需要的数据

这里可能有一个误区,觉得处理SQL语句的时候,为了判断是否已缓存查询结果,会将整个流程走一遍,取得执行结果后再与需要的进行对比,看看是否命中,并以此说,既然不管缓存中有没有缓存到查询内容,都要整个流程走一遍,那么缓存的优势又在哪里??

 

实际上,并非如此,在第一次查询后,mysql便将查询语句以及查询结果进行hash处理并保留在缓存中,SQL查询到达之后,对其进行同样的hash处理后,将两个hash值进行对照,如果一样,则命中,从缓存中返回查询结果;否则,需要整个流程走一遍。

分享到:
评论

相关推荐

    mysql原理介绍.doc

    Mysql工作原理介绍:Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的。SQL命令传递到解析器的时候会被解析器验证和解析。

    《深入理解MySQL主从原理32讲》推荐篇

    2008年开始至今一直从事Oracle/MySQL相关工作,现任易极付高级DBA,Oracle Ocm。有丰富的数据库性能调优,故障诊断经验,并且对MySQL源码有一定的研究。 《深入理解MySQL主从原理32讲》专栏包含GTID部分、Event部分...

    MySql5.5源码安装包

    这个源码安装包是针对那些希望深入理解MySQL工作原理、进行自定义配置或者在没有预编译二进制包可用的情况下进行安装的用户。以下是对MySQL 5.5源码安装的详细过程和相关知识点: 1. **源码获取**: - `mysql-...

    从根儿上理解MySQL

    【从根儿上理解MySQL】是一本专注于介绍MySQL工作原理和技术核心的书籍,旨在帮助有一定SQL基础的读者深入了解MySQL的内核机制。该书不是入门教程,而是为已经熟悉基本的增删改查操作的读者设计,特别是对SQL语言有...

    mysql-5.1.35

    在Linux环境下源码安装MySQL 5.1.35,虽然步骤较多,但能够提供更高的定制性,适合于对系统有特殊需求或想要深入了解MySQL工作原理的用户。安装完成后,你可以尽情探索这个强大的数据库系统,享受它带来的高效、稳定...

    MySQL数据库原理及应用(第2版)(微课版)-教学用数据库(Mysql数据库备份文件).zip

    在《MySQL数据库原理及应用(第2版)(微课版)》中,我们通常会深入探讨数据库的基本概念、设计原则以及实际操作技巧。这份教学资料包含了一个Mysql数据库的备份文件,为学习者提供了实践平台,便于理解和掌握...

    高性能mysql英文版,

    对于初学者来说,这是理解MySQL工作原理的关键一步。书中也涵盖了不同的存储引擎,如InnoDB和MyISAM,它们各有优缺点,适用于不同的场景。理解这些存储引擎的工作机制对于选择合适的数据存储方式至关重要。 其次,...

    mysql-essential-5.0.45-win32 + 安装手顺

    这个版本可能不包含最新的功能和安全更新,但对于学习基础操作和理解MySQL工作原理来说,仍然非常有价值。 安装过程分为以下几个步骤: 1. **下载与解压**:首先,你需要下载“mysql-essential-5.0.45-win32.msi”...

    mysql-5.5.28 源码 vc2008可以完整编译

    特别指出的是,这些源代码可以在Microsoft Visual Studio 2008(简称VC2008)环境下进行完整编译,这对于开发者来说是一个宝贵的资源,特别是那些希望深入理解MySQL工作原理或者想要对其进行定制和扩展的人员。...

    Mysql源码整理)_news4ep_mysql源码_MYSQL_

    MySQL是一款广泛使用的开源关系型数据库管理系统,其...通过对比学习,可以加深对MySQL工作原理的理解,提升数据库设计和管理能力。在深入源码学习的过程中,也需关注MySQL的最新版本和社区动态,以保持知识的更新。

    MySQL查询优化器的工作原理

    在讨论MySQL查询优化器的工作原理之前,我们需要先了解一些基础概念。优化器在DBMS中一般涉及几个关键的操作,包括但不限于逻辑优化、物理优化、成本计算和计划生成。逻辑优化主要是改变查询语句的结构而不改变其...

    MySQL JOIN 工作原理浅析1

    "MySQL JOIN 工作原理浅析" MySQL JOIN 工作原理浅析是数据库管理系统中的一种关键技术,用于将多个表连接起来以获取所需数据。本文将对 MySQL 中的 JOIN 工作原理进行浅析,包括 Nested Loop Join 和 Hash Join ...

    深入理解MySql.pdf

    了解MySQL的内部工作方式有助于更好地进行数据库管理与优化。 2. 数据类型和表设计:深入理解MySQL需要了解不同的数据类型,如整型、浮点型、字符型、日期时间类型等,并掌握如何根据需求设计合适的表结构。 3. ...

    MYSQL

    ROLLBACK) 6 MySQL 存取权限系统 6.1 权限系统做什么 6.2 MySQL用户名和口令 6.3 与MySQL服务器连接 6.4 使你的口令安全 6.5 MySQL 提供的权限 6.6 权限系统工作原理 6.7 存取控制,...

    [Mysql]性能测试脚本

    同时,脚本的输出也可以作为了解MySQL工作原理的参考,帮助你深入理解数据库的内部运作。 ### 注意事项 尽管`tuning-primer.sh`非常有用,但不能完全依赖自动化工具。每个MySQL环境都有其独特性,因此在采纳脚本...

    MySQL数据库原理及应用(第2版)(微课版)-课程标准.zip

    该课程旨在帮助学习者掌握数据库的基础理论,理解MySQL的架构和工作原理,以及如何在实际项目中有效地运用MySQL进行数据管理。作为教学资料,它包含了丰富的知识内容,为学生提供了系统学习和实践的框架。 首先,...

    mysql-essential-6.0.11-alpha-win32

    MySQL是世界上最受欢迎的开源数据库系统之一,尤其在Web应用程序开发中扮演着核心角色。"mysql-essential-6.0.11-alpha-...虽然这是一个较早的版本,但它包含了理解MySQL工作原理和数据库管理基础知识所需的所有元素。

    MySQL 8数据库原理与应用徐丽霞微课版实训代码

    学习者将了解到主从复制的工作原理,以及如何设置和管理复制链路,以及MySQL Group Replication等高级复制技术。 总的来说,这个实训涵盖了MySQL 8数据库从基础到进阶的各个方面,通过实际操作和案例分析,旨在帮助...

    数据库系统原理及MySQL应用教程习题答案.zip

    数据库系统原理是IT领域中一个核心的课程,它主要涵盖了数据的存储、组织、查询以及管理等方面的知识。...通过深入研究这些习题答案,你可以更好地理解数据库的工作机制,提升在实际项目中运用MySQL的能力。

    mysql源码(mysql-8.2.0.tar.gz)

    在这个版本中,开发者和研究者可以深入理解MySQL的内部工作原理,进行定制化开发或者排查问题。MySQL 8.2.0的源码分析将涉及多个关键知识点: 1. SQL解析与执行:MySQL的核心在于其SQL解析器,它将用户输入的SQL...

Global site tag (gtag.js) - Google Analytics