比较整数和比较字符串的性能差异

20 sql-server

任何人都可以在比较时提供任何具体的绩效证据

int = int
Run Code Online (Sandbox Code Playgroud)

和:

string = string
Run Code Online (Sandbox Code Playgroud)

WHEREMS-SQL中的in 子句.

例如

select *
from Samples
where SamplesID = 5
Run Code Online (Sandbox Code Playgroud)

和:

select *
from Samples
where Name = 'Shampoo'
Run Code Online (Sandbox Code Playgroud)

有差异还是性能相同?

u07*_*7ch 11

OK有趣的问题总是把它当成读取整数更快并且从未实际测试过它.我将1M随机姓氏和类型从我的数据中的联系人列表中删除到没有索引或主键只是原始数据的临时数据库.没有对我的数据范围进行测量,其中任何一列都没有标准化,因此反映了我的数据库的现实而不是纯粹的统计集.

select top 100 * from tblScratch where contactsurname = '<TestSurname>' order by NEWID()
select top 100 * from tblScratch where contacttyperef = 1-22 order by NEWID()
Run Code Online (Sandbox Code Playgroud)

Newid每次都会将数据列表随机化.快速运行20个姓氏和20种类型.查询运行姓氏比ref和姓氏.搜索参考编号几乎快了4倍,使用了大约1/2,因此几年前这些书都是正确的.

字符串 -
SELECT TOP 100 * FROM tblScratch WHERE contactsurname = 'hoare' ORDER BY NEWID()

Duration 430ms
Reads 902
CPU 203
Run Code Online (Sandbox Code Playgroud)

整数 -
SELECT TOP 100 * FROM tblScratch WHERE contacttyperef = 3 ORDER BY NEWID()

Duration 136ms
Reads 902
CPU 79
Run Code Online (Sandbox Code Playgroud)

  • 这不是一个好的测试(对不起),并且可能会产生误导,因为按NewID()排序引入了一个完全不切实际的元素 - 它通过GUID生成和排序行.解释WHERE语句后,优化器不一定会这样做.你可以把TOP和订单按NEWID()拿出并重新测试吗? (7认同)