delete優化 Presto SQL 優化技巧

2021-10-11 07:22:08 字數 1661 閱讀 7280

(2)用union all替代union:在不考慮去重的情況下如此

(3)少用order by:盡量將排序的字段減少些

(4)減少group by

(5)盡量少使用distinct

(6)用大表去join小表

presto 會預設執行廣播式的join操作,它會將左表拆分到幾個工作節點上, 然後傳送整個右表分別到已拆分好的處理左表的工作節點上. 如果右表非常大就會超出工作節點的記憶體限制,進而出錯.

如果左表和右表都比較大怎麼辦?

修改配置distributed-joins-enabled (presto version >=0.196)

在每次查詢開始使用distributed_join的session選項

-- set session distributed_join = 'true'
缺點是會增加很多網路資料傳輸, 所以會比broadcast join的效率慢.

核心點就是使用distributed join. presto的這種配置型別會將左表和右表同時以join key的hash value為分割槽字段進行分割槽. 所以即使右表也是大表,也會被拆分.

select
可以優化為:

presto 會預設執行廣播式的join操作,它會將左表拆分到幾個工作節點上, 然後傳送整個右表分別到已拆分好的處理左表的工作節點上. 如果右表非常大就會超出工作節點的記憶體限制,進而出錯.

如果左表和右表都比較大怎麼辦?

修改配置distributed-joins-enabled (presto version >=0.196)

在每次查詢開始使用distributed_join的session選項

-- set session distributed_join = 'true'
核心點就是使用distributed join. presto的這種配置型別會將左表和右表同時以join key的hash value為分割槽字段進行分割槽. 所以即使右表也是大表,也會被拆分.

缺點是會增加很多網路資料傳輸, 所以會比broadcast join的效率慢.

select
可以優化為:

select
使用with語句來進行子查詢:

select
可以優化為:

with

with

create

select
可以優化為:

select

-- this retuns 'n/a' if name value is null

select
人類身份驗證 - segmentfault​segmentfault.com

delete和delete 的區別

剛才在寫一段例子程式的時候,發現對於乙個指標型別的陣列t p,delete p和delete p的效果一樣。看了一下c primer和c programming language都沒有找到解釋,於是在網路上搜尋一下,發現了很好的解釋。整理一下 c 告訴我們在 用 new 分配的單個物件的記憶體空間的...

delete和delete 的區別

c 告訴我們在 用 new 分配的單個物件的記憶體空間的時候用 delete,用 new 分配的一組物件的記憶體空間的時候用 delete。樓主的這個問題提得很好。很多人注意到了這個問題,但是卻不清楚為什麼要這樣做,不這樣做行不行。關於 new 和 delete,其中又分為兩種情況 1 為基本資料型...

delete 與 delete 釋放記憶體

以下內容來引自 我們通常從教科書上看到這樣的說明 delete 釋放new分配的單個物件指標指向的記憶體 delete 釋放new分配的物件陣列指標指向的記憶體 那麼,按照教科書的理解,我們看下下面的 int a new int 10 delete a 方式1 delete a 方式2 肯定會有很多...