select sql 语句执行过程 顺序

(8) SELECT (9) DISTINCT (11) <TOP_specification> <select_list>

(1) FROM <left_table>

(3) <join_type> JOIN <right_table>

(2) ON <join_codition>

(4) WHERE <where_condition>

(5) GROUP BY <group_by_list>

(6) WITH {CUBE | ROLLUP}

(7) HAVING <having_condition>

(10) ORDER BY <order_by_list>

熟悉SQL的人应该一眼就能看出来上面语句的作用,基本包括了我们一般查询表的写法,SQL不同于其他编程语言最明显的特征就是他的代码顺训。在大多数语言中,代码按编码的顺序被处理,但在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但几乎总是最后处理。

   其实从逻辑上来说,每个步骤都会产生一个虚拟表,该虚拟表用作下一个步骤的输入(上面的标记代表执行步骤的顺序)但对于要优化一个查询来说,where那一步是最关键的,因为where产生的数据量越小,数据IO操作就越少,where后面的步骤,数据都是在内存中进行的。
可以用如下sql语句查看sql语句的IO、cup各占用的时间:
SET Statistics IO ON
GO

SET Statistics Time ON
GO

SET Showplan_Text ON
Go

–Query put in here
SELECT ProductID FROM Sales.SalesOrderDetail

–Turn off statistic
SET Statistics IO OFF
GO

SET Statistics Time OFF
GO

SET Showplan_Text OFF
Go

—————————————————————————————————-

发布日期:
分类:Mysql

发表评论

邮箱地址不会被公开。 必填项已用*标注