我住在澳大利亚,所以邮政编码是数字和四位数。
在另一个人的表格中,邮政编码字段已被设置为VARCHAR(10) - 奇怪我知道!!!
以下两个查询时间之间存在差异: 邮政编码= '3000' 邮政编码= 3000
两个查询都会运行,但带有单引号的查询运行速度会快50%到80%。同样,邮政编码IN('3000','3001','3002')比Postcode IN(3000,3001,3002)快得多。邮政编码字段已编入索引
问题是单引号如何产生如此大的速度差异?
任何人都可以了解引擎如何优化上述查询吗?
答案 0 :(得分:2)
如果不包含引号,解释器必须花时间从int
到varchar
进行隐式转换。如果您使用引号,它已经是varchar
,它可以节省转换为本机存储格式的时间。
答案 1 :(得分:2)
这里有一个重要陷阱。 如果您使用类似
的内容 code = 1000
而不是
code = '1000'
然后如果您有其他数据集,第一种情况将返回所有记录,如:
'1000', '1000A', '1000B'
等,而第二个将按预期返回'1000'。这可能是性能问题的原因。有人提到它将int转换为varchar。我相信它会将所有varchars转换为int,这就是为什么它是值得注意的