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
相关产品推荐
相关产品推荐

