sql執行順序及性能優化

sql語句的執行步驟:
1.語法分析
2.語義分析
3.視圖轉換
4.表達式轉換
5.選擇優化器
6.選擇連接方式
7.選擇連接順序
8.選擇數據的搜索路徑
9.運行“執行計劃”

sql查詢處理的步驟:
(8)SELECT(9)DISTINCT(11)<TOP_specification><select_list>
(1)FROM <left_table>
(3)<join_type>JOIN<right_table>
(2)ON <join_condition>
(4)WHERE <where_condition>
(5)GROUP BY <group_by_list>
(6)WITH (CUBE|ROLLUP)
(7)HAVING <having_condition>
(10)ORDER BY <order_by_list>

DISTINCT對整行進行防重
Oracle,mysql不支持select top語句
orale:
HAVING只能放在group by之後
group by後只能非聚合函數的列
group by要求select後的字段是分組字段或聚合函數
mysql:
HAVING可以單獨使用
group by對select後的字段沒有限制

INNER JOIN | LEFT JOIN | RIGHT JOIN | FULL OUTER JOIN
mysql不支持FULL OUTER JOIN

select f1,f2 from table_name GROUP BY cube(f1,f2);
select f1,f2 from table_name GROUP BY rollup(f1,f2);
ROLLUP只對第一個參數的列進行統計,CUBE都會進行統計

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章