1.序言
記得前幾年,還是初級的時候,面試官問到,請你講一下sql語句的執行順序。當時我以為就是按照sql的關鍵字排列順序來執行的。當時說完,面試官心裡估計已經直接pass我了吧。今天複習的時候,突然想起這個基礎知識點,是以有時間就來發表一下了。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SZkZDMhNjMzQWNlRmN1EzMkV2MkljN1YDMxcTMyImY28CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
山東掌趣網絡科技
2.sql語句的執行順序
2.1 為什麼要了解sql語句執行順序
了解一個sql語句的執行順序,可以讓我們清楚到sql執行時的操作順序,進而有利于我們更好的優化自己的sql語句,提升程式性能。
山東掌趣網絡科技
舉個栗子:
--sql 1
select a.* from table_a a left join table_b b on a.id = b.a_id where b.name = 'john';
--sql 2
select * from table_a where id = (select a_id from table_b where name = 'john');
倘若說table_a和table_b都是幾十幾百萬資料的表。而name=‘john’這個過濾字段可以查到table_b的唯一資料。那麼此時,一定是sql2的執行效率要高于sql1的。為什麼?通過sql執行順序可以知道,table_a和table_b會優先執行聯表操作,兩個都是大表。其查詢出來的結果集虛拟表也會很大。而sql2中,table_a隻用通過table_b查詢出來的唯一資料更快的擷取到指定結果。
山東掌趣網絡科技
是以,如果你不知道sql執行順序,同樣的業務需求,也許,你就使用了性能不夠好的sql1了。
2.2 sql語句執行順序說明
(8) SELECT (9)DISTINCT
(1) FROM
(3) JOIN
(2) ON
(4) WHERE
(5) GROUP BY
(6) WITH {CUBE|ROLLUP}
(7) HAVING
(10) ORDER BY
(11) LIMIT
山東掌趣網絡科技