Chr*_*amp 8 sql database query-optimization teradata
在Teradata我可以使用像...这样的声明
collect statistics on my_table column(col1)
Run Code Online (Sandbox Code Playgroud)
这将收集表上的统计信息并将它们存储在DBC视图中,如ColumnStats,IndexStats和MultiColumnStats.我也认为优化器(解析引擎)会在可用时找到统计信息,并使用它们而不是估计的基数/索引值计数来更好地决定如何执行查询.
这听起来很棒,但我有一些问题.
collect stats吗?collect statistics将不胜感激.use*_*394 13
1>使用收集统计数据有什么缺点吗?
是的,收集统计信息本身很耗时,它实际上是从AMPS定位数据并将统计信息插入字典表中.
假设您有一个表定义,如:
ct t1(x1 int,y1 int,z1 int);
该表包含数百万行,并且从未在ST/Join条件中使用z1,因此不值得在z1上收集统计数据.
2>何时在SQL脚本中使用收集统计信息是否合适/不合适?
已在上面回答.如果某列将用作ST/Join条件.ie在where或on子句中,则必须收集统计信息,否则不需要.
3>收集已编入索引的字段的统计信息有什么性能优势?
ct t1(x1 int,y1 int)主索引(x1);
对于一个简单的查询,例如来自t1的sel*,其中x1 = 5;
将证明收集统计数据的有用性.
怎么样?
优化器可以正确估计此查询将选择多少行,如果t1将与t2连接,优化器将选择有效的连接.
4>统计信息存储多长时间(表,易失性表)?
表:永久.
易变量表:直到会话到期.
5>有关收集统计数据的任何其他意见将不胜感激.
关于多列统计数据没有讨论过.
说,查询如下:
sel*from t1 on t2 on y1 = y2 and x1 = 2;
然后在(x1,y1)上收集多列统计数据对于优化非常有帮助.
此外,如果表格人口统计学已更改(行数增加),您必须考虑重新收集统计数据
| 归档时间: |
|
| 查看次数: |
28690 次 |
| 最近记录: |