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

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

 

 

   上面的图就是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部分...

    MySQL数据库原理及设计方法.pdf

    MySQL数据库是一种广泛使用的开源关系型数据库管理系统,其原理和设计方法是数据库管理员和开发者必须掌握的基础知识。本文将深入探讨MySQL的逻辑架构、并发控制、事务处理等方面。 首先,MySQL的逻辑架构分为三层...

    《MySQL数据库原理及应用》教案.rar

    《MySQL数据库原理及应用》是一门深入探讨关系型数据库管理系统MySQL的课程,旨在教授学生如何设计、创建和管理数据库,以及如何在实际应用场景中高效利用MySQL。教案详细涵盖了该课程的所有章节,为教学提供了全面...

    MySql5.5源码安装包

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

    从根儿上理解MySQL

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

    MySQL 基本原理

    MySQL 基本原理

    MySQL数据库原理及应用(第2版)(微课版)-配套教案.zip

    《MySQL数据库原理及应用(第2版)(微课版)》是一本深入浅出介绍MySQL技术的教材,配合配套教案,旨在帮助学生和学习者全面理解和掌握数据库设计与管理的核心概念。 该教程可能涵盖以下关键知识点: 1. **数据库...

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

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

    mysql数据库原理及引擎-MySQL数据库原理及应用PDF

    《MySQL数据库原理及应用》从教学实际出发,系统地介绍了MySQL数据库的有关原理和基本操作,主要内容包括数据库技术概述、MySQL概述、数据库基本操作、数据表、索引、结构化查询语言SQL、视图、触发器、存储过程和...

    《MySQL数据库原理、设计与应用》课后习题及答案黑马程序员编著

    《MySQL数据库原理、设计与应用》课后习题及答案 黑马程序员编著 答案都是正确的,因为是老师给的资源。 如果不想下载,也可以去我的博客看,一模一样的。 ...

    (完整)MySQL数据库原理与应用期末考试复习资料.pdf

    MySQL数据库是世界上最...这些知识点构成了MySQL数据库原理与应用的基础,对于理解和操作MySQL数据库至关重要。学习和掌握这些内容将有助于学生在期末考试中取得好成绩,并为未来在互联网行业中使用MySQL奠定坚实基础。

    高性能mysql英文版,

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

    mysql-5.1.35

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

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

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

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

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

    Mysql源码整理)_news4ep_mysql源码_MYSQL_

    MySQL是一款广泛使用的开源关系型数据库管理系统,其源码分析对于深入理解数据库的工作原理和技术细节具有重要意义。本资源包“Mysql源码整理_news4ep_mysql源码_MYSQL_”是数据库学习者在研究MySQL源码过程中的笔记...

    《MySQL数据库原理》PPT

    **MySQL数据库原理** MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),它以其高效、稳定和易用性在全球范围内赢得了广大用户的喜爱。本PPT将深入探讨MySQL的基本原理、功能特性和应用实践。 1. **数据库...

    mysql cluster 原理图

    对mysql cluster的原理做了比较细致的讲解,我认为该课件做的还是很好地。

    数据库MYSQL底层原理分析-笔记-pdf

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,其底层原理对于数据库管理员和开发人员来说至关重要,能够帮助他们优化查询性能,理解事务处理,以及更好地管理数据存储。以下是对标题和描述中涉及知识点的详细...

Global site tag (gtag.js) - Google Analytics