小编jwi*_*ize的帖子

同事说永远不要在 SQL 中使用 OR 语句,这是真的吗?

我现在负责 SQL 开发的同事说我永远不应该使用OR语句,因为它会弄乱查询优化器并忽略产生慢查询的表索引。我在谷歌搜索时找不到任何这样的例子。以下查询的替代方案变得非常难看,其中有十几个代码块看起来几乎相同(对于示例)使用 if else 语句为每个变量状态。请注意检查为短路的变量,如果值为 2,则返回所有结果,否则按字段过滤。

我询问了一些包含这些关于为什么不使用OR语句的声明的资源,并收到了以下链接(我们使用的是 MS SQL Server)。

这些示例似乎都不像当前的实现,如下所示。我发现很难相信这段代码有问题,但如果有问题,请告诉我。我还想了解更多信息,其中关于不使用的评论OR实际上可能适用以及为什么如此,以便更好地理解该问题。

SELECT
    e.EmployeeName,
    e.DepartmentName,
    crs.Title,
    c.Name as CompanyName
FROM Employee E
Left Outer Join Company c ON c.Id = @companyId
    INNER JOIN Department d on e.DepartmentId = d.Id 
WHERE   
    c.Id = @companyId           
    AND (@Active = 2 OR  crs.IsActive = @Active)
    AND (@Dot = 2 OR IsDot = @Dot)
    AND crs.CompanyId = @companyId
    AND d.CompanyId = @companyId
ORDER BY EmployeeName, Title, …
Run Code Online (Sandbox Code Playgroud)

sql-server optimization query-performance

17
推荐指数
2
解决办法
2648
查看次数