TERADATA中这两个查询的区别

时间:2015-05-19 13:31:22

标签: teradata

SEL * FROM TABLE WHERE a=10 

VS

SEL * FROM TABLE WHERE a='10' 

这里有一个BIGINT,解释计划没有显示任何差异,teradata如何处理这些以及这些查询中的任何差异?

1 个答案:

答案 0 :(得分:1)

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

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

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

如果你以另一种方式这样做:

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

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

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

有时这种自动转换很方便,但在这种情况下,它确实很糟糕:没有索引可以使用,所有现有的统计信息都会丢失。所以你最好知道你的数据类型: - )

解释中的这个(FLOAT, FORMAT '-9.99999999999999E-999'))是我检查查询是否表现不佳的第一件事。