我有一个包含some_column
数据类型列的表integer
。
我注意到我的 PostgreSQL 10.6 实例足够聪明,可以将以下两个查询解释为相同:
select * from my_table where some_column = 5; -- no quotes
select * from my_table where some_column = '5'; -- quotes added
where
在列的子句中添加引号会产生什么影响integer
?
它会对包含 2000 万行的大表产生性能影响吗?
(有一个索引some_column
。)
两者都做同样的事情,您将无法衡量性能的任何差异。
细节
这是一个字符串文字或字符串常量:
'5'
手册:
如果没有可以派生类型的上下文,则字符串文字最初被假定为 type
text
。(在您的示例中不是这种情况。)手册再次:
这是一个数字文字或数字常量:
5
手册:
因此,数字文字以特定类型开始。然后可以根据上下文需要将其转换为不同的类型 -如果定义了这样的转换。这是一个微妙但重要的区别 - 在您的情况下没有有效的区别,因为
5
is initialinteger
,这正是它需要的类型。但这在其他情况下很重要。尝试这个:
因为数字文字开始于
integer
并且没有为integer
-->定义的赋值转换text
。(任何类型都可以通过text
显式强制转换 (0::text
) 进行强制转换,但此处不假定该强制转换。)