MySQL SQL执行顺序解析及优化技巧

创始人
2024-12-25 15:16:04
0 次浏览
0 评论

SQL执行顺序-以MySQL为例

SQL执行顺序详解-以MySQL为例

SQL查询执行遵循从前到后的顺序:

FROM子句,包括JOIN,首先处理表的关系,是创建时的笛卡尔积没有过滤器。
例如,以Product和StoreProduct表为例:

首先创建这两个表,然后执行表连接操作生成Temp1表。

ON子句用于根据Product_ID进行匹配,过滤掉不符合条件的记录。
JOIN子句进一步处理关系,例如左外连接,它检查左表中的所有记录是否与Temp2表匹配,如果不匹配则添加NULL值。
WHERE子句基于Temp3表进行过滤,例如库存数量少于100只的产品。
GROUPBY和HAVING子句是基于GROUP概念执行的,整个函数应用于store_name字段。
WITH和ROLLUP生成用于汇总计算的超组。
SELECT和DISTINCT选择并减少字段以获得最终结果。
排序ORDERBY,然后LIMIT(TOP)进行分页。
尽管笛卡尔积可以产生大量时态数据,但在现实分析中,数据分析师经常查看数据的样本或聚合,而不是所有行的总和。
透彻理解SQL执行机制对于高效查询至关重要,但内存管理通常是由数据库系改进的。

SQL执行顺序

SQL执行的顺序对于理解查询语句的执行流程非常重要。
查询的主要步骤有:1)from(从哪张表获取数据),2)where(过滤条件),3)groupby(分组数据),4)with(过滤分组数据),5)select(选择或计算列),6)orderby(对结果排序)。
这些关键字的执行顺序与书写顺序并不相同,而是有特定的顺序:先fromwhere,然后where,然后groupby,has,select,最后inorder。

处理表连接时,需要注意的是from子句遵循从后到前和从右到左的规则。
通常首先选择数据量较小的表。
Where子句遵循自下而上、从右到左的解析顺序,在表连接后设置过滤条件,并设置大量过滤条件。
groupby用于对数据进行分组,而ha用于过滤分组结果。
尽量避免在GROUPBY之后使用HAVING,以减少资源消耗。

在SQLSelect语句中,select子句建议显式指定必填字段,而不是使用星号(*),这样可以减少解析过程中的资源消耗。
同时,使用大写的SQL语句可以防止Oracle在执行过程中进行不必要的转换。
orderby子句用于对结果进行排序。
虽然它很强大,但是却消耗了大量的资源。

总体而言,了解SQL的执行顺序可以帮助您编写更高效、更清晰的查询,确保过滤、分组和排序操作得到准确处理。

SQL语句执行顺序详解|MySQL

SQL查询语句的执行顺序如下,依次展开每一步:1、FROM子句:以FROM子句为起点,执行笛卡尔积,根据FROM中表的顺序,生成虚拟表VT1子句中,基表作为主要处理对象,从后向前处理。
2.ON过滤:对VT1应用过滤条件,生成VT2。
如果涉及到OUTERJOIN,则将表中不匹配的行保留为外部行。
3、JOIN操作:将其他表一一连接起来,添加保留的表数据形成VT3,直到FROM子句中的所有表都处理完毕。
4.WHERE过滤器:对VT3应用条件来过滤VT4。
目前无法使用分组功能,列别名仅在SELECT中可用。
5.GROUPBY:将VT4按列分组,形成VT5GROUPBY之后,只能使用聚合函数和列别名。
6.AGG_FUNC:计算聚合函数,如AVG、SUM等,生成VT6。
选项7.WITH:应用ROLLUP或CUBE将聚合结果扩展到所有可能的组合,得到过滤VT7值的VT7过滤器聚合生成VT8。
9.SELECT:从VT8中选择列并处理它们以生成VT9。
该别名现已可用。
10.DISTINCT:GROUPBY之后通常不再需要删除重复行并获取VT10。
11.ORDERBY:按指定列对VT10进行排序,生成VC10游标。
排序的成本很高,只有在必要时才使用。
12.LIMIT/OFFSET:选择从VC10开始的指定行,生成VT11并返回结果。
在示例中,SQL语句的顺序很重要。
例如,WHERE中的聚合条件应该放在GROUPBY之后,否则会因为没有计算聚合值而报错。
另外,有关LIMIT、分页和性能优化的更多信息,请参阅相关文章。
热门文章
1
高效掌握:CMD命令轻松启动、关闭及登录... 如何用cmd命令快速启动和关闭mysql数据库服务开发中经常使用MySQL数据库...

2
MySQL分区删除技巧与8.0版本新特性... mysql删除分区在MySQL中,删除分区操作主要使用“可替代”的命令与“ dr...

3
Python代码实现:如何判断三角形的三... python三角形三条边长,判断能否构成三角形Python三角形的三个长边如下:...

4
深度解析:MySQL查询语句执行顺序及优... mysql查询语句执行顺序当这是由于执行SQL的过程时,了解其过程很重要。 ...

5
SQL教程:使用SUBSTRING和IN... sql取特定字符的前面几位字符selectsubstr('L-0FCLDRBCT...

6
MySQL日期差异计算方法:轻松获取日期... MySQL计算时间差两日期相减得月份mysql两时间相减得月MySQL计算时间之...

7
MySQL及SQL查询获取前10条数据方... MySql查询前10条数据sql语句是从MySQL获取前1 0个数据的SQL查询...

8
MySQL启动问题排查与解决指南 Mysql为什么启动不了如果要配置MySQL,则遇到无法启动的问题,可能是由于配...

9
DbVisualizer添加MySQL数... 如何在DbVisualizer中添加本地mysql数据库由于DbVisualiz...

10
SQL字段默认值设置全攻略:轻松实现自动... sql如何设置字段默认值设置SQL中某个字段的默认值;需要遵循几个步骤。首先您需...