0

我想知道以下内容可能会对性能产生什么影响。假设有一个表,其中一个列数据类型为 int。该表包含数百万行。然后假设运行了以下 2 条 sql 语句。

SELECT * FROM tblTest WHERE colInt in (3,4)

SELECT * FROM tblTest WHERE colInt in ('3','4')

我相信在第二个查询中,隐含的字符数据类型将尝试转换 colInt 中的所有值,然后尝试进行比较。任何人都可以确认这是该过程的工作方式吗?有谁知道解释这一点的 MSDN 文章?这是相当昂贵的吗?

我知道这似乎很愚蠢,但是当您因为第三方软件而被迫接受它时,我们无能为力,除非完全理解当它们将几列的数据类型从 int 更改为时会产生什么影响varchar 和老虎钳对比。

4

2 回答 2

2

你应该对你的数据运行这个来查看。

int但是,在转换为varchar或反之时要非常小心。你会得到一些意想不到的行为,尤其是使用排序或不等式运算符,如<and >

SELECT 'True'
WHERE 100 < 20

SELECT 'True'
WHERE '100' < '20'

100大于20,但'100'小于 ,'20'因为 varchars 首先比较第一个字符,并且2大于1

0如果您在 varchars 中包含前导 s,它会变得更加复杂:

SELECT 'True'
WHERE 0100 < 020

SELECT 'True'
WHERE '0100' < '0020'

第二个语句不再是True因为'0020'小于,'0100'因为它以 2 0s 开头。

非常非常小心。

于 2011-05-31T13:45:41.703 回答
2

更有可能的情况是优化器会将这两个文字转换为 INT。

于 2011-05-31T13:42:54.623 回答