最佳化您的查詢 - Amazon Athena

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

最佳化您的查詢

使用本節中的建議來最佳化您在 Athena 中的SQL查詢。

與 BY 子句一LIMITORDER起使用

ORDER BY 子句會以排序順序傳回資料。這需要 Athena 將所有資料列傳送至單一工作節點,然後排序資料列。這種查詢類型可以執行很長一段時間,甚至失敗。

為了提高查詢效率,請查看頂部或底部 N 值,然後也使用一個LIMIT子句。這樣可以將排序和限制推送至個別工作節點,而不是單一工作節點,進而大幅降低排序的成本。

最佳化JOIN條款

當您聯結兩個資料表時,Athena 會將右側的資料表分散至工作節點,然後串流左側的資料表以執行聯結。

因此,請在聯結左側指定較大的資料表,並在聯結的右側指定較小的資料表。如此一來,Athena 會使用較少的記憶體,並以較低的延遲執行查詢。

另外,請注意以下重點:

  • 當您使用多個 JOIN 命令時,請按從最大到最小的順序指定資料表。

  • 除非查詢需要交叉聯結,否則請予以避免。

優化 GROUP BY 子句

GROUP BY 運算子會根據 GROUP BY 資料欄將資料列分散至工作節點。我們會在記憶體中引用這些資料欄,並在擷取資料列時比較這些值。當 GROUP BY 資料欄相符時,這些值彙總在一起。考慮到此程序的運作方式,建議按從最高基數到最低基數的順序排序資料欄。

使用數字而不是字串

由於相較於字串,數字需要的記憶體較少,而且處理速度更快,因此請盡可能使用數字而不是字串。

限制資料欄的數目

若要減少儲存資料所需的記憶體總量,請限制 SELECT 陳述式中指定的資料欄數。

使用正則表達式而不是 LIKE

包含子句 (例如大型字串上的 LIKE '%string%') 的查詢可能需要非常大量的運算。當您篩選字串資料欄上的多個值時,請改用 regexp_like() 函數和規則表達式。當您比較一長串值時,這特別有用。

使用條LIMIT款

當您執行查詢時,請不要選取所有資料欄,而是使用 LIMIT 子句,以只傳回您需要的資料欄。這樣做可減少透過查詢執行管道處理的資料集大小。當您查詢具有大量字串型資料欄的資料表時,LIMIT 子句會更有幫助。當您對任何查詢執行多個聯結或彙總時,LIMIT 子句也很有用。