TERADATA 中这两个查询的区别

Difference in these 2 queries in TERADATA

SEL * FROM TABLE WHERE a=10 

VS

SEL * FROM TABLE WHERE a='10' 

这里a是BIGINT,解释计划没有显示任何区别,teradata如何处理这个以及这些查询有什么区别?

如果您比较不同的数据类型(通常但不总是),Teradata 会自动应用数据类型转换。

每当将字符串与数字进行比较时,该字符串将被转换为 FLOAT,这是最灵活的数字格式。

在你的例子中,这个转换已经由解析器完成,所以优化器之前不知道 10 是 s 字符串。

如果换一种方式:

SEL * FROM TABLE WHERE a=10  -- column a is a character

你可以在 explain 中发现这个演员:

"(table.last_name (FLOAT, FORMAT '-9.99999999999999E-999'))= 1.00000000000000E 001"

有时这种自动转换很方便,但在这种情况下它真的很糟糕:无法使用索引并且所有现有统计信息都将丢失。所以你最好了解你的数据类型:-)

Explain 中的这个 (FLOAT, FORMAT '-9.99999999999999E-999')) 是我检查查询是否执行不当的第一件事。