sql – 在Teradata中使用COLLECT STATISTICS

前端之家收集整理的这篇文章主要介绍了sql – 在Teradata中使用COLLECT STATISTICS前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在Teradata我可以使用像…这样的声明
collect statistics on my_table column(col1)

这将收集表上的统计信息并将它们存储在DBC视图中,如ColumnStats,IndexStats和MultiColumnStats.我还认为优化器(解析引擎)会在可用时找到统计信息并使用它们而不是估计的基数/索引值计数来更好地决定如何执行查询.

这听起来很棒,但我有一些问题.

>使用收集统计数据有什么缺点吗?
>何时在sql脚本中使用收集统计信息是否合适/不合适?
>收集已编入索引的字段的统计信息的性能优势是什么?
>为(表,易失性表)存储统计信息多长时间?
>有关收集统计数据的任何其他意见将不胜感激.

解决方法

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)上收集多列统计数据对于优化非常有帮助.

此外,如果表格人口统计已更改(行数增加),则必须考虑重新收集统计信息

猜你在找的MsSQL相关文章