sql server中的子查询v/s内连接

Nit*_*esh 35 sql performance query-optimization sql-server-2012

我有以下疑问

第一个使用内连接

SELECT item_ID,item_Code,item_Name 
FROM [Pharmacy].[tblitemHdr] I 
    INNER JOIN  EMR.tblFavourites F ON I.item_ID=F.itemID
WHERE F.doctorID = @doctorId AND F.favType = 'I'
Run Code Online (Sandbox Code Playgroud)

第二个使用子查询

SELECT item_ID,item_Code,item_Name from [Pharmacy].[tblitemHdr]
WHERE item_ID IN
(SELECT itemID FROM EMR.tblFavourites
WHERE doctorID = @doctorId AND favType = 'I'
)
Run Code Online (Sandbox Code Playgroud)

在此项目表中[Pharmacy].[tblitemHdr]包含15列和2000条记录.并[Pharmacy].[tblitemHdr]包含5列和大约100条记录.在这种情况下which query gives me better performance?

Die*_*ego 31

通常,连接比内部查询工作得更快,但实际上它将取决于SQL Server生成的执行计划.无论您如何编写查询,SQL Server都将始终根据执行计划对其进行转换.如果它足够"智能"从两个查询生成相同的计划,您将得到相同的结果.

这里这里有一些帮助链接.


Arn*_*501 13

在Sql Server Management Studio中,您可以启用" 客户端统计信息 "并包括"实际执行计划".这将使您能够准确了解每个请求的执行时间和负载.

还要在每个请求之间清理缓存以避免缓存对性能的影响

USE <YOURDATABASENAME>;
GO
CHECKPOINT;
GO
DBCC DROPCLEANBUFFERS;
GO
Run Code Online (Sandbox Code Playgroud)

我认为用自己的眼睛看待而不是依靠理论总是最好的!


Paz*_*Paz 5

join比子查询更快.

子查询使繁忙的磁盘访问,想到硬盘的读写指针(head?),它在访问时来回传递:User,SearchExpression,PageSize,DrilldownPageSize,User,SearchExpression,PageSize,DrilldownPageSize,User ...等等上.

通过在第一两个表的结果集中的操作加入作品,任何随后的联接将集中接合在所述第一连接表的存储器内(或缓存到磁盘)结果,等等.较少的读写针运动,因此更快

来源:这里


小智 5

子查询与连接

表一20行,2列

表两20行,2列

子查询20 * 20

参加20 * 2

合理地纠正

详细

在此处输入图片说明

在此处输入图片说明

扫描计数表示倍增效果,因为系统必须一次又一次地读取数据,对于性能指标而言,只需查看时间即可