sql - 这两个查询有什么区别?

时间:2012-11-07 13:11:31

标签: sql performance

select a.Name from rat. Assessment a where a.AssessmentId = '3'
select a.Name from rat. Assessment a where a.AssessmentId = 3

性能差异是什么? 是第一个慢吗?

我怎么知道sql server是否已经将列或值转换为匹配列类型或值类型?

我看到了执行计划。不太了解。

3 个答案:

答案 0 :(得分:2)

如果不知道您使用的是哪个数据库,涉及的类型是什么,那就不容易说了。

许多数据库尝试将常量类型转换/转换为列类型,因此当他们从磁盘读取每一行时,他们不必这样做。但是,当它发生时,无法保证会发生这种情况。

但并非每个数据库都尝试匹配类型。因此,对于其中一些,您将收到错误或者您将不会得到任何结果(因为数字不是字符串,因此查询不能真正匹配任何内容)。

答案 1 :(得分:1)

虽然这两者都有效,但如果AssessmentID的数据类型是数字,则第二个查询更快,因为不需要强制转换,而第一个要求服务器首先将值转换为数字。

答案 2 :(得分:1)

第一个需要类型转换(假设AssessmentID是数字数据类型),这会产生性能开销。在这种情况下,它可以忽略不计,但在更复杂的查询中,可能存在性能差异。在某些情况下,如果需要进行类型转换,MySQL无法有效地使用索引。