为什么使用命令的第二个查询EXECUTE
比没有命令的第一个查询快 4 倍?我怎么解决这个问题?
为什么在第二种情况下创建了附加表(Workatable)?
变量:
DECLARE @count INT, @followerId BIGINT
SET @count=1024
SET @followerId=10
第一个查询(普通查询):
SELECT TOP (@count) Photo.* FROM Photo
WHERE EXISTS (SELECT accountId FROM Follower
WHERE Follower.followerId=@followerId
AND Follower.accountId = Photo.accountId)
AND Photo.closed='False'
ORDER BY Photo.createDate DESC
日志:
SQL Server 解析和编译时间:CPU 时间 = 0 毫秒,运行时间 = 7 毫秒。
SQL Server 执行时间:CPU 时间 = 0 毫秒,经过时间 = 0 毫秒。
表“照片”。扫描计数 952,逻辑读取 542435,物理读取 0,预读读取 0,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。
表“追随者”。扫描计数 1,逻辑读取 7,物理读取 0,预读读取 0,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。
SQL Server 执行时间:CPU 时间 = 1466 毫秒,经过时间 = 9620 毫秒。
执行计划:
第二个查询(与 相同的查询EXECUTE
):
EXEC ('SELECT TOP (' +@count + ') Photo.* FROM Photo
WHERE EXISTS ( SELECT accountId FROM Follower
WHERE Follower.followerId=' +@followerId + '
AND Follower.accountId = Photo.accountId)
AND Photo.closed=''False''
ORDER BY Photo.createDate DESC')
日志:
SQL Server 解析和编译时间:CPU 时间 = 0 毫秒,运行时间 = 0 毫秒。
SQL Server 执行时间:CPU 时间 = 0 毫秒,经过时间 = 0 毫秒。
SQL Server 执行时间:CPU 时间 = 0 毫秒,经过时间 = 0 毫秒。SQL Server 解析和编译时间:CPU 时间 = 25 毫秒,运行时间 = 25 毫秒。
表“工作台”。扫描计数 0,逻辑读取 0,物理读取 0,预读读取 0,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。
表“照片”。扫描计数 952,逻辑读取 542707,物理读取 0,预读读取 0,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。
表“追随者”。扫描计数 6,逻辑读取 9,物理读取 0,预读读取 0,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。
表“工作台”。扫描计数 0,逻辑读取 0,物理读取 0,预读读取 0,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。
SQL Server 执行时间:CPU 时间 = 1374 毫秒,经过时间 = 2140 毫秒。
SQL Server 执行时间:CPU 时间 = 1405 毫秒,经过时间 = 2165 毫秒。