【发布时间】:2018-11-08 08:19:47
【问题描述】:
我的队友有一个 SQL 查询,我认为它有很多谓词,这是导致性能不佳的原因。它看起来像这样:
WHERE
(@IdSenales IS NULL OR senalesIds.id = comp.IdSenal)
AND
(@IdAnunciantes IS NULL OR anunciantesIds.id = comp.IdAnunciante)
AND
(@IdProgramas IS NULL OR programasIds.id = emision.IdProgramaVariante)
AND
(@IdTipoPublicidades IS NULL OR publicidadesIds.id = orden.IdTipoPublicidad)
AND
(@Canje = 0 OR (@canje = 1 AND comp.IdTipoCondicionCobro != 12))
AND
(emision.Fecha BETWEEN @FechaDesdeContrato AND ISNULL(@FechaHastaContrato, emision.fecha))
AND
(comp.FechaEmision BETWEEN @FechaDesde AND @FechaHasta)
AND
(@IdSectorImputacion = 0 OR @IdSectorImputacion = simp.IdSectorImputacion)
我来自阿根廷,所以它是用西班牙语评论的(对不起)。
我的问题是,是否可以通过将WHERE 子句中的比较与我创建的返回相同的函数进行比较来提高性能?
非常感谢,
大卫
【问题讨论】:
-
使用标量函数会更糟,而不是更好。但实际上,这是一种包罗万象的查询,由于执行计划缓存的工作方式,性能将无处不在。查看这篇文章,了解一些改善这一点的好方法。 sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries
-
可以发一下表结构和一些示例数据吗?并给出所涉及的记录数量的想法。
-
@SeanLange Gail 几个月前发布了对她帖子的更新:sqlinthewild.co.za/index.php/2018/03/13/…
-
@Larnu 我完全忘记了那篇文章。谢谢你的推动。 :)
-
@Nick,我收到这个查询是为了在家里检查它,我不在那个环境中。我想明天我可以从表结构中获得更多信息。我是这个环境中的新手,另一个想法是检查所有数据库设计。我认为这一切都是由不是 DBA 的人创建的......
标签: sql sql-server performance where-clause querying