mysql的select语句执行流程

本文介绍了MySQL中SELECT语句的执行流程,包括连接器、查询缓存、解析器、优化器和存储引擎等步骤。在执行过程中,首先建立连接,然后检查查询缓存,接着解析SQL语句,优化执行计划,并在存储引擎中获取数据。同时,优化器还会考虑权限验证。整个流程详细解析了从SQL输入到返回结果的全过程。
摘要由CSDN通过智能技术生成

Mysql中select语句执行流程

1、mysql架构

在这里插入图片描述mysql结构(照片有点模糊,但是不妨碍理解。大家也可自行查找)
mysql主要功能模块:

1)连接器(连接/线程处理器):主要负责管理客户端连接,权限验证。
2)查询缓存:负责缓存查询结果。
3)解析器:对sql语句进行词法分析,语法分析,校验sql语句。
4)优化器:对解析器解析完成的sql生成执行计划,选择索引。
5)存储引擎:存储数据,负责提供读写接口。

其中1)至4)称为mysql服务层,5)称为mysql的存储引擎层。

2、select语句执行流程

	有了上面图的理解,大家大致对mysql的结构有了大致的了解。
	下面以对select语句的执行流程进行简单介绍, 假定sql语句:select * from table

1)建立连接

  mysql -h ip  -p port -u user -p
  password
  通过上面的语句和mysql服务器建立连接。如果用户名和密码不对,则会显示“Access denied for user” 的提示。

2)查询缓存

	建立完连接之后,select语句执行到第二步,查询缓存。之前执行的sql语句结果会以key-value对的形式被缓存到内存中。key是sql语句,value是查询结果。如果select语句在key中,则直接返回value给客户端。
	如果缓存中查询不到,就会继续执行后续阶段。执行完后将结果缓存到内存中,用于下次查询。(缓存失效非常频繁,例如update之后则会清空缓存)。

3)解析器

	对于缓存失效之后,则解析器会对sql语句进行分析。先对sql语句进行词法分析,分析select * from table是否符合mysql的语法规范。然后对sql语句进行语法分析,如果sql语句不对,则会显示You have an error in your SQL syntax的错误提醒。请仔细检验sql语句语法是否规范。

4)优化器

	经过解析器解析之后,mysql就知道需要做什么。在开始执行之前,优化器根据表中的索引选择使用哪个索引,或者是join时选择表连接的顺序。从而选择最优方案。

5)优化器

经过解析器之后,mysql知道做什么,经过优化器之后,mysql知道怎么做。
开始执行前,mysql先判断用户是否拥有查询权限,如果没有权限,返回没有权限的错误。即使是命中缓存,在返回结果时,也会做权限验证。最终返回查询结果。

3、总结

mysql中的select语句的执行流程大致如上所述。

以上内容仅是个人理解,如果理解有不对的地方欢迎指出,大家共同理解。

### 回答1: MySQLSELECT语句执行顺序如下: 1. FROM:指定要查询的表或视图。 2. JOIN:如果查询涉及到多个表,需要使用JOIN关键字将它们连接起来。 3. WHERE:指定查询条件,只有符合条件的记录才会被返回。 4. GROUP BY:按照指定的列对结果进行分组。 5. HAVING:指定分组后的条件,只有符合条件的分组才会被返回。 6. SELECT:指定要查询的列。 7. DISTINCT:去除重复的记录。 8. ORDER BY:指定结果的排序方式。 9. LIMIT:指定返回结果的数量。 以上是MySQL SELECT语句的执行顺序,需要注意的是,不是所有的SELECT语句都需要按照这个顺序执行,有些语句可能会省略其中的一些步骤。 ### 回答2: MySQLSELECT语句执行顺序可以分为以下9个步骤: 1. 执行FROM子句,获取表中的数据。 2. 执行WHERE子句,筛选出符合条件的数据。 3. 执行GROUP BY子句,将数据按照指定的列进行分组。 4. 执行HAVING子句,筛选出符合条件的分组。 5. 执行SELECT子句,选择需要查询的列。 6. 执行DISTINCT关键字,去除重复的行。 7. 执行ORDER BY子句,按照指定的列对结果集进行排序。 8. 执行LIMIT子句,指定返回的结果数量。 9. 最后输出查询结果。 需要注意的是,执行顺序并不一定按照上述顺序执行,某些步骤可能被优化或者省略,例如如果查询中没有WHERE子句,则不需要执行WHERE子句。此外,MySQL还支持查询缓存,如果查询缓存中已经存在相同的查询结果,则直接返回缓存结果,不需要执行上述步骤。 在优化查询性能时,可以使用多种技巧来优化各个步骤。例如,可以使用索引来加速查询的WHERE条件,使用分区表来加速GROUP BY操作,使用EXPLAIN关键字来分析查询性能等。 ### 回答3: MySQLSELECT语句是关系型数据库中最常用的查询语句,在操作数据时必须掌握其执行顺序。SELECT语句的执行顺序分为以下六个步骤: 1. FROM子句:指定要查询的表及其所在的数据库。如果在查询时使用了多个表,那么就需要使用JOIN等操作将这些表联接起来。 2. JOIN子句:根据指定的连接条件将要查询的表连接起来。JOIN子句在FROM子句之后执行,但是在WHERE子句之前执行。 3. WHERE子句:指定查询的条件。WHERE子句在JOIN子句之后执行,但是在GROUP BY子句之前执行。 4. GROUP BY子句:将查询的结果分组。GROUP BY子句在WHERE子句之后执行,但是在HAVING子句之前执行。 5. HAVING子句:指定按组过滤后的查询结果。HAVING子句在GROUP BY子句之后执行,但是在SELECT子句之前执行。 6. SELECT子句:指定要查询的列及其计算方式。SELECT子句在所有子句中最后执行。 需要注意的是,SELECT语句中的ORDER BY子句并不是查询执行顺序的一部分,而是在查询结束后对查询结果进行排序的语句。因此,ORDER BY子句总是在SELECT语句执行完毕之后执行。 总之,了解SELECT语句的执行顺序是操作关系型数据库的基本要求,只有深入理解每个步骤的顺序,才能更好地优化数据库查询的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值