全部產品
Search
文件中心

AnalyticDB:手動收集統計資訊

更新時間:Nov 16, 2024

統計資訊記錄了資料庫表中中繼資料的相關資訊。查詢最佳化工具需要根據最新的統計資訊,最佳化並執行查詢計劃,以提高資料庫的效能。本文為您介紹在雲原生資料倉儲AnalyticDB PostgreSQL版資料庫中如何使用ANALYZE命令手動收集統計資訊。

適用情境

手動收集統計資訊,無需頻繁使用。可在滿足以下條件時,手動執行ANALYZE命令收集統計資訊。

  • 表中超過20%資料更新(INSERTUPDATEDELETE)或建立索引後,需手動收集統計資訊。

  • ETL任務過程中,會涉及多次INSERTUPDATEDELETE,可根據實際情況,適當添加ANALYZE語句以手動收集統計資訊。

  • 建立的表(包含函數或預存程序)寫入資料後,可根據實際情況,適當添加ANALYZE語句以手動收集統計資訊。

  • 調優過程中,從執行計畫中看到錶行數估算為1行,計劃中出現較多的Broadcast、Sort+GroupByAgg、NestLoop等運算元時,考慮對相應資料表進行手動收集統計資訊。

ANALYZE用法

雲原生資料倉儲AnalyticDB PostgreSQL版資料庫使用ANALYZE命令收集統計資訊。

文法

ANALYZE [VERBOSE] [ROOTPARTITION ALL|[table [(column[, ... ])]] ]
說明

ANALYZE可單獨使用。單獨使用時為資料庫中所有的表收集統計資訊。該方式已耗用時間可能會比較久。

參數說明

  • VERBOSE:列印ANALYZE執行過程中掃描行數、可見行數等統計資訊。如果不含此參數將不列印統計資訊。

  • ROOTPARTITION ALL|[table [(column[, ... ])]]:對分區表的主表觸發收集統計資訊。

    • ROOTPARTITION ALL:對當前資料庫下所有分區表的主表觸發收集統計資訊。

    • ROOTPARTITION [table]:對某張分區表的主表觸發收集統計資訊。

    • 如果不含ROOTPARTITION,對分區主表執行ANALYZE時,則會對分區子表也執行統計資訊。

  • table[(column1, column2, ...)]:對某張表的若干列收集統計資訊。如果不寫列名,預設為整張表的所有列收集統計資訊。為減少ANALYZE執行時間,您可以只對用JOINWHERESORTGROUP BY或者HAVING涉及的列收集統計資訊。此時運行ANALYZE需要指定表的名稱和列的名稱作為參數,例如:ANALYZE t1(a, b)

使用樣本

對orders表的o_orderdate列和o_orderpriority列收集統計資訊。

ANALYZE orders(o_orderdate, o_orderpriority);