gpt4 book ai didi

Sql Server 查询性能

转载 作者:行者123 更新时间:2023-12-04 22:41:43 25 4
gpt4 key购买 nike

我在一个繁忙的数据库上有一个存储过程,它经常在昂贵的查询列表中名列前茅(以某种方式)。查询非常简单,它采用单个参数(@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 子句的查询)

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

关于Sql Server 查询性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2788082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com