一、语法
COMPUTE STATS [db_name.]table_name [ ( column_list ) ]column_list ::= column_name [, column_name, … ]
二、使用说明
·完整扫描 (默认):如果未提供 column_list,COMPUTE STATS 会为表中的所有列计算统计信息。
·指定列:可通过可选的逗号分隔列列表指定要计算统计信息的列。这适用于宽表或大型字符串列,可避免不必要的开销。
·错误处理:当指定的列不存在或列类型(如复杂类型)不受支持时,语句将报错。如果提供空列表,则不分析任何列。
三、性能考量
COMPUTE STATS 是 ETL 过程结束时的一个关键步骤。准确的统计信息是生成高效查询计划、提升性能和降低内存使用的基础。
·优化连接: 准确的统计信息能帮助 TCHouse-X 为连接查询构建高效的执行计划。
·资源管理: 统计信息有助于 TCHouse-X 估算每个查询所需的内存,这对于使用准入控制 (Admission Control) 尤其重要。
·性能调优: 对于大表,COMPUTE STATS 语句本身可能耗时较长。
四、示例
这个示例展示了两张表 T1 和 T2,它们通过 T1.ID 与 T2.PARENT 之间的父子关系关联,且具有较少的不同值。最初,统计信息仅包含物理度量,例如文件数、总大小,以及针对固定长度列(如 INT 类型)的大小度量。未知值用 -1 表示。对每张表运行 COMPUTE STATS 之后,通过 SHOW STATS 语句可以获取更多详细信息。如果要对这两张表进行连接查询,就需要同时拥有它们的统计信息,才能获得最有效的查询优化。
— 创建 demo 表 t1、t2, 并插入数据CREATE TABLE t1(id INT, s STRING);CREATE TABLE t2(parent INT, s STRING);INSERT INTO t1 (id, s) VALUES (1, '电子产品'), (2, '家用电器'), (3, '办公用品'), (4, '运动户外'), (5, '图书音像');INSERT INTO t2 (parent, s) VALUES (1, '智能手机'), (1, '笔记本电脑'), (1, '平板电脑'), (2, '电冰箱'), (2, '全自动洗衣机'), (3, '人体工学椅'), (3, '激光打印机'), (4, '山地自行车'), (4, '露营帐篷'), (5, '科幻小说');– 查看表 t1 的统计信息SHOW TABLE STATS t1;– 结果– +——-+——–+——+——–+– | #Rows | #Files | Size | Format |– +——-+——–+——+——–+– | -1 | 1 | 679B | TCI |– +——-+——–+——+——–+– 查看表 t2 的统计信息SHOW TABLE STATS t2;– 结果– +——-+——–+——+——–+– | #Rows | #Files | Size | Format |– +——-+——–+——+——–+– | -1 | 1 | 823B | TCI |– +——-+——–+——+——–+– 查看表 t1 的列统计信息SHOW COLUMN STATS t1;– 结果– +——–+——–+——————+——–+———-+———-+——–+———+– | Column | Type | #Distinct Values | #Nulls | Max Size | Avg Size | #Trues | #Falses |– +——–+——–+——————+——–+———-+———-+——–+———+– | id | INT | -1 | -1 | 4 | 4 | -1 | -1 |– | s | STRING | -1 | -1 | -1 | -1 | -1 | -1 |– +——–+——–+——————+——–+———-+———-+——–+———+– 查看表 t2 的列统计信息SHOW COLUMN STATS t2;– +——–+——–+——————+——–+———-+———-+——–+———+– | Column | Type | #Distinct Values | #Nulls | Max Size | Avg Size | #Trues | #Falses |– +——–+——–+——————+——–+———-+———-+——–+———+– | parent | INT | -1 | -1 | 4 | 4 | -1 | -1 |– | s | STRING | -1 | -1 | -1 | -1 | -1 | -1 |– +——–+——–+——————+——–+———-+———-+——–+———+– 对 t1 执行统计信息收集COMPUTE STATS t1;– 查看表 t1 的统计信息SHOW TABLE STATS t1;– 结果– +——-+——–+——+——–+– | #Rows | #Files | Size | Format |– +——-+——–+——+——–+– | 5 | 1 | 679B | TCI |– +——-+——–+——+——–+– 查看表 t1 的列统计信息SHOW COLUMN STATS t1;– 结果– +——–+——–+——————+——–+———-+———-+——–+———+– | Column | Type | #Distinct Values | #Nulls | Max Size | Avg Size | #Trues | #Falses |– +——–+——–+——————+——–+———-+———-+——–+———+– | id | INT | 5 | 0 | 4 | 4 | -1 | -1 |– | s | STRING | 5 | 0 | 4 | 4 | -1 | -1 |– +——–+——–+——————+——–+———-+———-+——–+———+– 对 t2 执行统计信息收集COMPUTE STATS t2;– 查看表 t2 的统计信息SHOW TABLE STATS t2;– 结果– +——-+——–+——+——–+– | #Rows | #Files | Size | Format |– +——-+——–+——+——–+– | 10 | 1 | 823B | TCI |– +——-+——–+——+——–+– 查看表 t2 的列统计信息SHOW COLUMN STATS t2;– 结果– +——–+——–+——————+——–+———-+———-+——–+———+– | Column | Type | #Distinct Values | #Nulls | Max Size | Avg Size | #Trues | #Falses |– +——–+——–+——————+——–+———-+———-+——–+———+– | parent | INT | 5 | 0 | 4 | 4 | -1 | -1 |– | s | STRING | 10 | 0 | 6 | 4.5 | -1 | -1 |– +——–+——–+——————+——–+———-+———-+——–+———+