sql - 内部连接性能问题或条件
问题描述
我有一个返回 300 万条记录的 sp。现在它需要 16 分钟。我正在尝试优化它。因为加入它的时间有一个或条件。有没有办法优化它?
SELECT
id, from
FROM
[#Temp1] AD
JOIN [#Temp2] SS
ON AD.Id = SS.Id
OR (SS.Code = AD.Code AND AD.ID IS NULL)
JOIN wTable1 WSS WITH(NOLOCK)
ON SS.PId= WSS.Id
解决方案
通常最好的方法是使用left join
s:
select id,
coalesce(wss1.col, wss2.col) as col
from [#Temp1] AD left join
[#Temp2] SS1
ON AD.Id = SS1.Id left join
[#Temp2] SS2
ON SS2.Code = AD.Code AND AD.ID IS NULL LEFT JOIN
wTable1 WSS1
ON WSS1.Id = SS1.PID LEFT JOIN
wTable1 WSS2
ON WSS2.ID = SS2.PID
WHERE SS1.ID IS NOT NULL OR SS2.CODE IS NOT NULL; -- one of the joins works
我不能保证这适用于您的具体情况,因为您没有提供样本数据和所需的结果。但是,这种方法在类似情况下确实有效。
推荐阅读
- scala - 当我已经知道项目是唯一的时设置 vs 列表
- typo3 - TYPO3 8.7 locallang 翻译中的多个参数
- macos - 在 mac 终端中安装外部 chrome 扩展
- git - 如何在 pre-commit git hook 中获取“no-verify”参数
- gem5 - MOESI_CMP_directory 响应消息中关于 out_msg.Destination 的问题
- ios - UISearchBar 书签图标未隐藏在滚动条上
- javascript - this.context.router 未定义
- javascript - 如何自动保存画布?
- mysql - 具有 JSON 字段类型的 MySQL 连接查询
- python - 根据第一个值从元组列表中获取值