[英]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.