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

性能方面有什么不同?第一个慢吗?

我如何知道 sql server 是否已将列或值转换为与列类型或值类型匹配?

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

4

3 回答 3

2

如果不知道您使用哪个数据库、涉及的类型是什么,这并不容易说出来。

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

但并非每个数据库都尝试匹配类型。所以对于其中一些,你会得到一个错误或者你不会得到任何结果(因为数字不是字符串,所以查询并不真正匹配任何东西)。

于 2012-11-07T13:15:56.433 回答
1

尽管这两种方法都有效,但如果数据类型AssessmentID是数字,则第二个查询会更快,因为不需要转换,而第一个查询需要服务器首先将值转换为数字。

于 2012-11-07T13:14:08.507 回答
1

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

于 2012-11-07T13:14:10.463 回答