我有两张桌子,
Need table在needid列上有clusted索引,NeedCategory在needid和categoryid上有复合聚簇索引。
现在看一下查询的以下查询和执行计划。
SELECT N.NeedId,N.NeedName,N.ProviderName
FROM dbo.Need N
JOIN dbo.NeedCategory NC
ON nc.NeedId = n.NeedId
WHERE IsActive=1
AND CategoryId= 2
ORDER BY NeedName
Isactive = 1时,需要表上的聚簇索引扫描。
在CategoryId = 2
我的问题是,
提前致谢
答案 0 :(得分:1)
加入后不会变轻。
为什么你认为加入后会更轻?
为什么你认为在所有nc.NeedId = n.NeedId匹配更好然后过滤呢?
如果你先过滤,那么你永远不必匹配nc.NeedId = n.NeedId,无论如何都会被淘汰。
相对便宜的Merge Join是一件好事。
让我们说我把袜子和鞋子搭配起来只想要红袜子。 为什么我要将蓝色袜子与鞋子搭配起来然后消除它。
答案 1 :(得分:0)
我们说Need
表有10,000行,其中一半有IsActive = 1
; NeedCategory
有100行,80有CategoryID = 2
。将10,000行连接到100行然后过滤结果会更快,还是扫描表以过滤行然后加入操作,匹配5,000行到80行?
您可以影响计划在特定限制内的生成方式。但是,要非常小心。 SQL Server通常比开发人员更了解数据。