統計信息記錄了數據庫表中元數據的相關信息。查詢優化器需要根據最新的統計信息,優化并執行查詢計劃,以提高數據庫的性能。本文為您介紹在云原生數據倉庫AnalyticDB PostgreSQL版數據庫中如何使用ANALYZE
命令手動收集統計信息。
適用場景
手動收集統計信息,無需頻繁使用。可在滿足以下條件時,手動執行ANALYZE
命令收集統計信息。
表中超過20%數據更新(
INSERT
、UPDATE
或DELETE
)或創建索引后,需手動收集統計信息。ETL任務過程中,會涉及多次
INSERT
、UPDATE
或DELETE
,可根據實際情況,適當添加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
執行時間,您可以只對用JOIN
、WHERE
、SORT
、GROUP BY
或者HAVING
涉及的列收集統計信息。此時運行ANALYZE
需要指定表的名稱和列的名稱作為參數,例如:ANALYZE t1(a, b)
。
使用示例
對orders表的o_orderdate列和o_orderpriority列收集統計信息。
ANALYZE orders(o_orderdate, o_orderpriority);