所有内容收錄在合集~MySQL入門到熟練。歡迎點贊關注我哦~
輸入一段句子,MySQL怎麼運作呢?
首先第一步是進行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種情況時,怎麼優化?
共同點,都是從上往下發現,執行的時間逐漸增加。
思路:
MySQL自身優化
用具體的關鍵字代替*
網絡IO優化
用查找字段減少網絡io
SQL自身優化
查詢字段用索引覆寫
将偏移量改為id限定的方法,使用where
完結~