將運算單元之間的通訊最佳化

評估通訊總處理量時,請考慮查詢需要的隨機排列量。在階段之間會傳送多少位元組數?會將多少位元組數傳送到每一個運算單元?例如,GROUP BY 會導致傳送值等項目到相同的運算單元進行處理。隨機排列的資料量直接影響到通訊總處理量,因此也會影響到查詢效能。

以下最佳做法提供控制運算單元之間通訊的指引。

使用 JOIN 之前減少資料

最佳做法:減少在 JOIN 子句之前處理的資料量。

請在查詢執行 JOIN 之前,盡早在查詢中修剪資料。如果您在處理週期中及早減少資料,隨機排列與其他複雜的操作就只會對您需要的資料執行。

請勿把 WITH 子句當成參數化查詢

最佳做法:需要獲得可讀性時再使用 WITH 子句。

WITH 子句主要用於可讀性的目的,因為它們並未具體化。例如,將所有查詢放進 WITH 子句中,然後執行 UNION ALL,並不是 WITH 子句的正確用法。如果查詢出現在一個以上的 WITH 子句中,它會在每個子句中執行。

避免使用依日期進行資料分割的資料表

最佳做法:請勿使用依日期進行資料分割的資料表 (又稱為以日期命名的資料表) 來取代時間分區資料表。

分區資料表的執行效果比以日期命名的資料表好。當您建立依日期進行資料分割的資料表時,BigQuery 必須為每個以日期命名的資料表保留一份結構定義與中繼資料的複本。同時,當使用以日期命名的資料表時,BigQuery 可能需要驗證每個查詢資料表的權限。這個做法也會增加查詢的負擔,並影響查詢效能。

避免使用資料分割資料表

最佳做法:避免建立太多資料表資料分割。如果您要依日期對資料表進行資料分割,請改為使用時間分區資料表。

資料表資料分割是指將大型資料集分成單獨的資料表,並為每個資料表名稱加上尾碼。如果您要依日期對資料表進行資料分割,請改為使用時間分區資料表

由於 BigQuery 儲存空間的成本很低,您不需要為了成本的目的最佳化資料表,因為您是在一個關聯式資料庫系統中。 建立大量資料表資料分割會衝擊效能,這與節省成本相較,可說是弊大於利。

資料分割資料表需要 BigQuery 為每個資料分割維持結構定義、中繼資料與權限。由於維持每個資料分割的資訊會增加額外負擔,因此對資料表過度進行資料分割會影響查詢效能。

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁