(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
人類身份驗證 - segmentfaultsegmentfault.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 肯定會有很多...