作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有两个表:
Table A
ProdID | PartNumber | Data...
1 | ABC-a | "Data A"
2 | (null) | "Data B"
3 | ABC-c | "Data C"
...
和
Table B
ProdID | PartNumber | DataB
(null) | ABC-a | "Data D"
2 | (null) | "Data E"
3 | (null) | "Data F"
(null) | ABC-z | "Data G"
...
不理想,但无论如何。我要
ProdID | PartNumber | Data | DataB...
1 | ABC-a | "Data A" | "Data D"
2 | (null) | "Data B" | "Data E"
3 | ABC-c | "Data C" | "Data F"
(null) | ABC-z | (null) | "Data G"
所以我用
SELECT *
FROM Table1 T1
RIGHT JOIN Table2 T2 ON
T1.ProdID = T2.ProdID OR T1.PartNumber = T2.PartNumber
这正是我想要的,但似乎需要大约 100 倍于 or 的任一侧。作为更复杂查询的一部分,OR
需要 2 分钟,而 int
需要 <1 秒,nvarchar(50) 需要 1 秒
。表“A”有约 13k 行,表“b”有约 35k 行,整个查询返回约 40k。
查询计划
我认为这个“Table Spool”可能是问题所在。
SQL Server 2008 R2 Express。想法?
最佳答案
分别加入每种方式,然后合并结果:
SELECT T1.ProdID, T1.PartNumber, T1.Data, ISNULL(tprodid.DataB, tpartno.DataB) as DataB
FROM Table1 T1
LEFT JOIN Table2 tprodid ON T1.ProdID = tprodid.ProdID
LEFT JOIN Table2 tpartno ON T1.PartNumber = tpartno.PartNumber;
这将使用两个索引并且性能良好。您可能希望根据自己的喜好调整 ISNULL
逻辑。
关于sql - 加入 OR 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8305655/
我是一名优秀的程序员,十分优秀!