【问题标题】:Using COLLECT STATISTICS in Teradata在 Teradata 中使用 COLLECT STATISTICS
【发布时间】:2013-05-16 10:58:15
【问题描述】:

在 Teradata 中,我可以使用类似 ... 的语句

collect statistics on my_table column(col1)

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

这听起来不错,但我有一些问题。

  • 使用collect stats有什么缺点吗?
  • 什么时候适合/不适合在 SQL 脚本中使用收集统计信息?
  • 收集已编入索引的字段的统计信息有什么性能优势?
  • (表、易失性表)的统计信息存储多长时间?
  • 任何其他有关collect statistics 的cmets 将不胜感激。

【问题讨论】:

  • 对不起,但 IMO 这个问题不适合 SO。收集统计数据是 Teradata 的一个非常重要的部分,也许是必不可少的部分,并且有许多在线文章讨论了这个主题。此外,您对这个问题有太多不同的部分,无法清楚地回答。任何一颗子弹都可能值得再次询问。投票结束时“没有建设性”。
  • 嘿 Bob,您认为将问题迁移到 Database Administrators SO 站点而不是投票“不具建设性”更合适吗?我找到了文章,但没有一篇能真正解决我的问题

标签: sql database query-optimization teradata


【解决方案1】:

1>使用收集统计数据有什么缺点吗?

是的,收集统计数据本身很耗时,它实际上是从 AMPS 中定位数据并将统计数据插入字典表中。

假设您有如下表定义:

ct t1(x1 int,y1 int, z1 int);

该表包含数百万行,并且 z1 从未用于 ST/Join 条件,因此不值得收集 z1 上的统计信息。

2>什么时候适合/不适合在 SQL 脚本中使用收集统计信息?

上面已经回答了。如果一列将用作 ST/Join 条件。即在 where 或 on 子句中,您必须收集统计信息,否则不需要。

3>收集已编入索引的字段的统计信息有什么性能优势?

ct t1(x1 int,y1 int) 主索引(x1);

对于一个简单的查询,例如 sel * from t1 where x1 = 5;

将展示收集统计数据的实用性。

怎么做?

优化器可以正确估计此查询将选择多少行,如果 t1 将与 t2 连接,优化器将选择一个有效的连接。

4>(表、易失性表)的统计信息存储多长时间?

表:永久。

易失性表:直到会话到期。

5>任何其他有关收集统计信息的 cmets 将不胜感激。

没有关于多列统计的讨论。

说,查询是这样的:

sel * from t1 join t2 on y1=y2 and x1=2;

然后收集 (x1,y1) 上的多列统计信息将非常有助于优化。

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

【讨论】:

  • 你好用户,我很欣赏深思熟虑的回应
猜你喜欢
  • 1970-01-01
  • 2015-01-19
  • 2017-07-19
  • 1970-01-01
  • 2019-03-31
  • 2017-06-24
  • 1970-01-01
  • 1970-01-01
  • 2015-05-11
相关资源
最近更新 更多