You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server查询优化求助:键查找高开销及index scan疑问

SQL查询优化疑问

原始查询语句:

SELECT TOP 10 
    call_list.*
FROM
    call_list
LEFT JOIN
    call_lock ON call_lock.call_list_id = call_list.pkid 
              AND call_lock.tenant_id = call_list.tenant_id
WHERE
    call_list.campaign_id IN (SELECT * FROM @listOfCampaigns)
    AND call_list.tenant_id = @tenant_id
    -- 筛选符合日期时间规则的有效回呼
    AND call_list.next_call_dt < @next_call_dt
    -- 坐席预约呼叫类型
    AND call_list.call_type_id = @call_type_id
    AND call_list.next_agent_id = @next_agent_id
    -- 验证未设置锁定
    AND call_lock.pkid IS NULL
ORDER BY
    call_list.next_call_priority DESC, call_list.next_call_dt ASC;

我在优化这条查询时遇到了几个问题:

  • 一开始为ORDER BY的列创建了索引,但执行计划显示键查找的开销占比高达90%
  • 尝试创建索引CREATE INDEX IDX_call_list_PROC_CALL_LIST_SELECT_AGENT_DATED ON call_list (call_type_id, next_agent_id);后,执行计划完全没变化
  • 后来改用包含所有列的ORDER BY索引,执行计划有了变化,但不确定这样的优化是否到位
  • 最后给用户定义表类型@myListOfInt添加了主键,把IN改成JOIN,现在执行计划里只剩下index scan和index seek,想知道index scan是不是属于需要优化的不良情况

内容的提问来源于stack exchange,提问作者Mad hatter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 22:52:05