嗨, 大家好: 网站在新年后正式开通,欢迎大家加入我们,共同维护一个良好氛围的中国技术社区。 欢迎举报不良帖子,欢迎提供建议。
我们的QQ群:136102234,欢迎进群找答案,里边会有很多资深的大师们。 point overflow

要想学习mysql,体系结构这一块肯定跑不了。

目的:认识和了解mysql是怎么从头来运行一个命令的
刚开始只做大概了解即可,到了一定时间很多时候会和这个结构挂钩。


以下是结构图:

体系结构图

asked 2016-02-18 11:14:31

jkant's gravatar image

jkant ♦♦
11134138139
accept rate: 3%


先来解释各个部分:

1.connectors:其他语言与sql交互.

2.management services & utillties:管理服务和工具组件.备份,恢复,安全,复制,集群,管理,配置,数据传输和数据

3.connection poll:连接池组件.管理缓冲用户连接,线程处理等需要缓存的需求。验证,线程回收,连接限制,检查内存,缓存

4.sql interface:sql接口组件.接受用户的SQL命令,并且返回用户需要查询的结果。DMl,DDL,存储,视图,触发器等。

5.parser:查询分析器组件.查询转换以及对象权限

6.optimizer:查询优化器.

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

8.pluggable storage engines:插件式存储引擎.

9.file system:物理文件.

10.files & logs:文件和日志.

link

answered 2016-02-18 11:18:10

jkant's gravatar image

jkant ♦♦
11134138139
accept rate: 3%

举个列子分析:

比如我有一个sql,他的执行过程是怎么样的?

1.首先可以确定的是数据库是启动的(需要管理服务和工具组件),并且肯定需要.file system,files & logs用于存储数据问题,日志等

2.肯定有个数据库api用于连接数据库(connectors)

3.连接到数据库肯定需要到线程池获取线程(connection poll)

4.获取线程后,会将sql传输到内部sql接口(sql interface),如果命中了缓存(cashes & buffers),那么就不执行以下步骤直接从缓存返回数据

5.接收到sql之后做解析,即做条件处理,舍弃1=1等条件(parser)

6.解析完成后就转到优化环节,调整sql以选择合适的方式(optimizer)

7.之后就是调用存储引擎做处理。并返回结果

link

answered 2016-02-19 10:33:16

jkant's gravatar image

jkant ♦♦
11134138139
accept rate: 3%

Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "Title")
  • image?![alt text](/path/img.jpg "Title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Tags:

×72
×1
×1
×1

Asked: 2016-02-18 11:14:31

Seen: 971 times

Last updated: 2016-02-19 10:33:16