MySQL单引号效率

时间:2011-08-16 00:42:30

标签: mysql performance

我住在澳大利亚,所以邮政编码是数字和四位数。

在另一个人的表格中,邮政编码字段已被设置为VARCHAR(10) - 奇怪我知道!!!

以下两个查询时间之间存在差异: 邮政编码= '3000' 邮政编码= 3000

两个查询都会运行,但带有单引号的查询运行速度会快50%到80%。同样,邮政编码IN('3000','3001','3002')比Postcode IN(3000,3001,3002)快得多。邮政编码字段已编入索引

问题是单引号如何产生如此大的速度差异?

任何人都可以了解引擎如何优化上述查询吗?

2 个答案:

答案 0 :(得分:2)

如果不包含引号,解释器必须花时间从intvarchar进行隐式转换。如果您使用引号,它已经是varchar,它可以节省转换为本机存储格式的时间。

答案 1 :(得分:2)

这里有一个重要陷阱。 如果您使用类似

的内容
 code = 1000

而不是

code = '1000'

然后如果您有其他数据集,第一种情况将返回所有记录,如:

 '1000', '1000A', '1000B'

等,而第二个将按预期返回'1000'。这可能是性能问题的原因。有人提到它将int转换为varchar。我相信它会将所有varchars转换为int,这就是为什么它是值得注意的