union聯合查詢首先需要做什么?
交叉連接交叉連接。是一種沒有任何限制的連接方法,結果是笛卡爾積。SQL語法如下所示:
上述SQL相當于:
內部聯接(默認為聯接)內部聯接。當表中至少有一個匹配項時返回行可以理解為同時滿足某些條件的兩個表中的行的組合。內連接又分為等連接、不等連接和自連接。SQL語法如下所示:
使用作為連接條件。
不平等連接:不用作連接條件。
自連接:自己連接自己,也就是只連接一個表。
左連接左連接。一種外部聯接,返回左表(table1)中的所有行。即使右表(table2)中沒有匹配項,如果右表中沒有匹配項,結果也是NULL。SQL語法如下所示:
右連接右連接。一種外部聯接,返回右表(table2)中的所有行。即使左表(table1)中沒有匹配,如果左表中沒有匹配,結果也是NULL。SQL語法如下所示:
完全連接。一種外部聯接,只要左表(表1)和右表(表2)中有一個匹配項,就會返回一行,從而聚合左聯接和右聯接的結果。SQL語法如下所示:
其中,MySQL不支持全聯接,全聯接的查詢可以通過左聯接、并聯接和右聯接相結合來實現。示例:
聯合聯合查詢(去重)。用于合并兩個或多個SELECT語句的結果集。UNION中的每個SELECT語句必須具有相同順序的相同數量的列,并且這些列還必須具有相似的數據類型。SQL語法如下所示:
注意:聯合查詢的結果中沒有重復的值。UNIONALLunion查詢(無重復)。用于合并兩個或多個SELECT語句的結果集。UNION結果集中的列名始終等于UNION中第一個SELECT語句中的列名。SQL語法如下所示:
或者:
注意:
UNIONALL查詢的結果中允許有重復值。
使用UNION或UNIONALL時,只能在最后一個SELECT語句中使用ORD
事務執行過長如何優化?
事務執行時間過長的優化方法:
1)地圖連接
適用于小桌子加入大桌子的場景。由于表的連接操作是在Map端和內存中進行的,不需要啟動Reduce任務,所以不需要經過shuffle階段,從而節省了資源,一定程度上提高了連接效率。
2)解決數據不對稱數據偏斜指的是鍵的不均勻分布,這種分布導致不同的減少。單個縮減特別重,這導致其他縮減的完成,但是這些單個縮減被延遲。
3)避免計數(distinct)。可以改為使用Groupby。
4)盡早過濾數據。根據業務特點,添加必要的過濾條件。
5)列裁剪。只查詢所需的列以節省磁盤讀取。
6)調整加入順序。盡量將數據較少的表/子查詢放在連接的左側。
7)優化SQL查詢。能夠從源表中掃描一次結果,而不是多次掃描。也就是同一個表,一次做盡可能多的操作。
8)盡可能避免子查詢分組。也就是先試著把結果聯系起來,再分組。
9)當需要執行多個子查詢的unionall或JOIN操作時,作業可以是并行的(設置為true)。
10)反匯編多表連接。當連接大量表時,配置單元執行引擎可能無常工作。這時可以分步執行SQL,即把少量的表分別連接起來,然后匯總。