[英]Subquery v/s inner join in sql server
我有以下查询
第一个使用内部联接
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'
第二个使用子查询
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'
)
在此表中, [Pharmacy].[tblitemHdr]
包含15列和2000条记录。 [Pharmacy].[tblitemHdr]
包含5栏和大约100条记录。 在这种情况下which query gives me better performance?
在Sql Server Management Studio中,您可以启用“ 客户端统计信息 ”,还可以包括实际执行计划 。 这使您能够准确知道每个请求的执行时间和负载。
还在每个请求之间清理缓存,以避免缓存对性能的副作用
USE <YOURDATABASENAME>;
GO
CHECKPOINT;
GO
DBCC DROPCLEANBUFFERS;
GO
我认为用肉眼看总是比依靠理论更好!
连接比子查询快。
子查询导致磁盘访问繁忙,请考虑访问硬盘时来回读写的针(头?):User,SearchExpression,PageSize,DrilldownPageSize,User,SearchExpression,PageSize,DrilldownPageSize,User ...等上。
联接通过将操作集中在前两个表的结果上而起作用,任何后续联接将把联接集中在第一个联接表的内存中(或缓存到磁盘)结果上,依此类推。 更少的读写针移动,从而更快
资料来源: 这里
第一个查询比第二个查询要好..因为第一个查询我们将两个表都加入了。 并检查两个查询的解释计划...
这完全取决于表之间的数据和关系映射。 如果不遵循RDBMS规则,那么即使第一个查询在执行和数据获取上也将很慢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.