翻譯|使用教程|編輯:吳園園|2020-06-18 14:38:56.347|閱讀 221 次
概述:在dbForge Studio for SQL Server中借助SQL Profiler對(duì)執(zhí)行計(jì)劃進(jìn)行分步分析,可以檢測查詢性能的瓶頸。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
dbForge Studio for SQL Server為有效的探索、分析SQL Server數(shù)據(jù)庫中的大型數(shù)據(jù)集提供全面的解決方案,并設(shè)計(jì)各種報(bào)表以幫助作出合理的決策。
點(diǎn)擊下載dbForge Studio for SQL Server最新試用版
讓我們通過執(zhí)行“比較所選結(jié)果”命令來比較結(jié)果:
我們必須說,UNPIVOT和VALUES查詢的執(zhí)行速度沒有明顯差異。這適用于將列簡單轉(zhuǎn)換為行的情況。
讓我們檢查另一個(gè)任務(wù),我們需要為每個(gè)玩家找到游戲中最頻繁的結(jié)果。
我們將嘗試在UNPIVOT聲明的幫助下完成此任務(wù):
SELECT PlayerID , GameType = ( SELECT TOP 1 GameType FROM dbo.Players UNPIVOT ( GameCount FOR GameType IN ( Win, Defeat, StandOff ) ) unpvt WHERE PlayerID = p.PlayerID ORDER BY GameCount DESC ) FROM dbo.Players p
在執(zhí)行計(jì)劃中,它表明瓶頸是多重?cái)?shù)據(jù)讀取和排序,這對(duì)于組織數(shù)據(jù)行是必需的:
如果我們記得可以使用外部查詢塊中的列,則很容易擺脫多重?cái)?shù)據(jù)讀取:
SELECT p.PlayerID , GameType = ( SELECT TOP 1 GameType FROM (SELECT t = 1) t UNPIVOT ( GameCount FOR GameType IN ( Win, Defeat, StandOff ) ) unpvt ORDER BY GameCount DESC ) FROM dbo.Players p
消除了多次讀取數(shù)據(jù),但是最耗資源的操作–排序仍然存在:
這就是VALUES語句在此任務(wù)期間的行為:
SELECT t.PlayerID , GameType = ( SELECT TOP 1 GameType FROM ( VALUES (Win, 'Win') , (Defeat, 'Defeat') , (StandOff, 'StandOff') ) t (GameCount, GameType) ORDER BY GameCount DESC ) FROM dbo.Players t
正如我們期望的那樣,該計(jì)劃得到了簡化,但是仍然存在排序:
讓我們嘗試通過使用聚合函數(shù)來避免排序:
SELECT t.PlayerID , GameType = ( SELECT TOP 1 GameType FROM ( VALUES (Win, 'Win') , (Defeat, 'Defeat') , (StandOff, 'StandOff') ) t (GameCount, GameType) WHERE GameCount = ( SELECT MAX(Value) FROM ( VALUES (Win), (Defeat), (StandOff) ) t(Value) ) ) FROM dbo.Players t
現(xiàn)在執(zhí)行計(jì)劃如下所示:
我們?cè)O(shè)法擺脫了排序。
結(jié)論
當(dāng)需要在SQL Server中將列轉(zhuǎn)換為行時(shí),最好使用UNPIVOT或VALUES結(jié)構(gòu)。
如果在轉(zhuǎn)換之后,應(yīng)該將接收到的數(shù)據(jù)行用于聚合或排序,那么我們最好使用VALUES結(jié)構(gòu),這在大多數(shù)情況下會(huì)導(dǎo)致更有效的執(zhí)行計(jì)劃。
對(duì)于可能出現(xiàn)不同結(jié)構(gòu)類型且列數(shù)不受限制的表,建議使用XML,它與動(dòng)態(tài)SQL不同,可以在表函數(shù)內(nèi)部使用。
在dbForge Studio for SQL Server中借助SQL Profiler對(duì)執(zhí)行計(jì)劃進(jìn)行分步分析,可以檢測查詢性能的瓶頸。
了解更多產(chǎn)品信息或想要購買產(chǎn)品正版授權(quán)請(qǐng)點(diǎn)擊
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: