我有一张表(比如T1),它在c1,c2和c3列上定义了一个PI。
在一个查询中,需要仅在c1上进行过滤,并且由于给定的未知原因,我无法在列c1上创建二级索引。
我尝试写这样的查询 -
select *
from T1
where C1 = <some Value>
and c2 = c2
and c3 = c3
鉴于c2和c3的条件是重言式,结果集不会受到影响。但是,我“期待”欺骗Teradata为此查询调用PI,但这不会发生。
任何解释?
答案 0 :(得分:1)
Teradata的PI基于哈希,因此必须使用基于相等性的ANDed条件引用所有三列。
当只知道一列时,无法获得PI访问权限。 但是你当然可以创建一个二级索引(为什么它会失败?)。如果这是一个经常性的要求,您最好考虑更改PI和/或添加分区。
答案 1 :(得分:0)
您可以使用列&#39; C1&#39;的主索引创建哈希索引或单个表连接索引。这将允许您对索引进行单一或组AMP访问,然后对基表进行行ID访问。另一种选择,如果&#39; C1&#39;唯一的是在该列上创建USI。如果您在符合条件时提供多个值,这将为您提供具有单个值或组AMP选项的双AMP操作。
我不知道一种查询基表的方法,因为你已经定义了它并且在没有完全限定它的情况下访问主索引。