sql – 在Teradata中使用COLLECT STATISTICS
在Teradata我可以使用像…这样的声明
collect statistics on my_table column(col1) 这将收集表上的统计信息并将它们存储在DBC视图中,如ColumnStats,IndexStats和MultiColumnStats.我还认为优化器(解析引擎)会在可用时找到统计信息并使用它们而不是估计的基数/索引值计数来更好地决定如何执行查询. 这听起来很棒,但我有一些问题. >使用收集统计数据有什么缺点吗? 解决方法1>使用收集统计数据有什么缺点吗?是的,收集统计信息本身很耗时,它实际上是从AMPS定位数据并将统计信息插入字典表中. 假设您有一个表定义,如: ct t1(x1 int,y1 int,z1 int); 该表包含数百万行,并且从未在ST / Join条件中使用z1,因此不值得在z1上收集统计数据. 2>在SQL脚本中何时使用收集统计信息是否合适/不合适? 已在上面回答.如果要将列用作ST / Join条件.i.e在where或on子句中,则必须收集统计信息,否则不需要. 3>收集已编入索引的字段的统计信息的性能优势是什么? ct t1(x1 int,y1 int)主索引(x1); 对于一个简单的查询,例如来自t1的sel *,其中x1 = 5; 将证明收集统计数据的有用性. 怎么样? 优化器可以正确估计此查询将选择多少行,如果t1将与t2连接,优化器将选择有效的连接. 4>统计数据存储多长时间(表,易失性表)? 表:永久. 易变量表:直到会话到期. 5>关于收集统计数据的任何其他评论将不胜感激. 没有讨论过多列统计数据. 说,查询如下: sel * from t1在y1 = y2和x1 = 2时加入t2; 然后在(x1,y1)上收集多列统计数据对于优化非常有帮助. 此外,如果表格人口统计已更改(行数增加),则必须考虑重新收集统计信息 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |