[英]Sql Server query performance
我在繁忙的數據庫上有一個存儲過程,它經常在昂貴的查詢列表中排名第一(通過某種方式)。 查詢非常簡單,只需要一個參數(@ID,int)作為表的主鍵,並選擇與該ID匹配的記錄。 主鍵是帶有聚簇索引的標識字段,所以我對如何進一步優化它感到難過?
查詢如下
CREATE PROCEDURE [dbo].[P_Call_Get]
@ID int = null
AS
select ID,
AppID,
AgentID,
AgentLogin,
Ext,
VDN,
VDNName,
Skill,
SkillName,
CallFrom,
TelNoFrom,
ParentCallID,
CallStart,
ACWStart,
CallEnd,
Outcome,
StageID,
TxTo,
TxSuccess,
ServiceID,
DiallerID,
CRC,
TSCallID,
CallDirection,
[Manual],
CallBackAgent,
CallBackDateTime,
Notes
from P_Call
where (ID = @ID or @ID is null)
不確定發布執行計划的最佳方式 - 它顯示的是聚集索引掃描占用了100%的操作
我認為通過使用where (ID = @ID or @ID is null)
您將獲得次優計划。 將其划分為2個單獨的查詢,以便在@Id不為空的情況下,它將直接查找它,並且您將獲得計划中出現的搜索而不是掃描。 你可以用你需要的列創建一個View來避免重復(即沒有where子句的Query)
select ID,
AppID,
AgentID,
AgentLogin,
Ext,
VDN,
VDNName,
Skill,
SkillName,
CallFrom,
TelNoFrom,
ParentCallID,
CallStart,
ACWStart,
CallEnd,
Outcome,
StageID,
TxTo,
TxSuccess,
ServiceID,
DiallerID,
CRC,
TSCallID,
CallDirection,
[Manual],
CallBackAgent,
CallBackDateTime,
Notes
from P_Call
嘗試清理過程緩存和內存緩沖區:
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
在測試過程的性能之前執行此操作將阻止使用緩存的執行計划和以前的結果緩存。
你能用桌子嗎? 它可能解決了這個問題。
表中有多少行? 您確實意識到“聚簇索引掃描”=全表掃描。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.