天天看點

MySQL52課~SQL的執行順序,如何讓查詢更快

作者:小餅幹筆記

所有内容收錄在合集~MySQL入門到熟練。歡迎點贊關注我哦~

輸入一段句子,MySQL怎麼運作呢?

MySQL52課~SQL的執行順序,如何讓查詢更快

首先第一步是進行from的運作,進行比對,然後生成一張新的虛拟表,假設名字是X1

然後進行篩選,複合條件的留下,生成一張新的虛拟表X2

第二步left,上一步取的是交集,選左表,生成一張新的虛拟表X3

第三步是where的運算,在X3的基礎上進行篩選,生成一張新的虛拟表X4

第四步group by運算,進行分組,生成一張新的虛拟表X5,不僅有資料資訊,關于組的資訊也是保留的

第五步對分組結果進行篩選,having,生成一張新的虛拟表X6

第六步進行select,把之前的結果列印出來,生成一張新的虛拟表X7

第七步distinct,去重,生成一張新的虛拟表X8

最後order by,不再生成新的虛拟表,limit傳回最終結果。

總結:

執行順序并不完全按照書寫順序。

實際執行中,先執行t2表,根據T2表放入篩選條件,得到新的表

再掃描T1表,不同的資料庫特性不同,結果相同,

使用on的時候,會把需要的,已經過濾的資訊加回來

where,執行的時候,根據條件直接進行篩選,不會補齊資料。

是以,連接配接的條件用on,需要兩個表格合在一起的時候

篩選的條件,不需要連接配接的時候,用where

如果有2張以上的表格,第一步從from運作到left,每加一張表,多走一遍

子查詢先執行内層的,再執行外層的

視窗函數,标志是over,執行的時候在dis之前

面對下面2種情況時,怎麼優化?

MySQL52課~SQL的執行順序,如何讓查詢更快
MySQL52課~SQL的執行順序,如何讓查詢更快

共同點,都是從上往下發現,執行的時間逐漸增加。

思路:

MySQL自身優化

用具體的關鍵字代替*

網絡IO優化

用查找字段減少網絡io

SQL自身優化

查詢字段用索引覆寫

将偏移量改為id限定的方法,使用where

完結~

繼續閱讀