【发布时间】:2015-02-12 23:16:32
【问题描述】:
我有一个表(比如 T1),它在 c1、c2 和 c3 列上定义了一个 PI。
在一个查询中,只需要在 c1 上进行过滤,并且由于给定的未知原因,我无法在 c1 列上创建二级索引。
我尝试编写这样的查询 -
select *
from T1
where C1 = <some Value>
and c2 = c2
and c3 = c3
鉴于 c2 和 c3 的条件是重言式,结果集不会受到影响。但是,我“期望”欺骗 Teradata 为该查询调用 PI,但这种情况不会发生。
有什么解释吗?
【问题讨论】:
-
您的桌面上的统计数据是最新的吗?此外,当您说您试图“欺骗” Teradata 时,Teradata 中的主索引与 SQL Server 或 Oracle 中的索引不同。你能帮我澄清一下吗?
-
好吧,当我使用“傻瓜”这个词时,我的意思不是不尊重。唯一的一点是,索引是一个包含 3 列的复合索引,而我的过滤器只需要一个。我还尝试使用 c2 'junk value' 并且 c2 不是空类型的条件,它们都不会调用 PI,只有当我提供具有相等条件的文字时才会调用 PI(c2 =
),这就是促使我使用 c2 = c2 类比的原因。想知道在这种情况下是否有办法调用 PI? -
你能发布解释计划吗?
标签: teradata