我使用下一个查询从 DB 中提取前 100 和 101 行并获得以下经过时间,这完全不同(第二个查询比第一个慢约 8 个):
SELECT TOP (100) *
FROM PhotoLike WHERE photoAccountId=@accountId AND accountId<>@accountId
ORDER BY createDate DESC
GO
SQL Server 执行时间:CPU 时间 = 187 毫秒,经过时间 = 202 毫秒。
SELECT TOP (101) *
FROM PhotoLike WHERE photoAccountId=@accountId AND accountId<>@accountId
ORDER BY createDate DESC
GO
SQL Server 执行时间:CPU 时间 = 266 毫秒,经过时间 = 1644 毫秒。
前两种情况的执行计划:
但是,如果我摆脱 @accoundId 变量,我会得到以下结果,它大约等于并且比这个问题的第一个查询快 2 倍以上。
SELECT TOP (100) *
FROM PhotoLike WHERE photoAccountId=10 AND accountId<>10
ORDER BY createDate DESC
GO
SQL Server 执行时间:CPU 时间 = 358 毫秒,经过时间 = 90 毫秒。
SELECT TOP (101) *
FROM PhotoLike WHERE photoAccountId=10 AND accountId<>10
ORDER BY createDate DESC
GO
SQL Server 执行时间:CPU 时间 = 452 毫秒,经过时间 = 93 毫秒。
后两案执行计划:
为什么会发生这种情况,如何使用变量提高性能?
更新
添加了执行计划。