SEL * FROM TABLE WHERE a=10
VS
SEL * FROM TABLE WHERE a='10'
这里有一个BIGINT,解释计划没有显示任何差异,teradata如何处理这些以及这些查询中的任何差异?
答案 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'))
是我检查查询是否表现不佳的第一件事。