您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何使SQL查询中的重复自定义表达式可维护

如何使SQL查询中的重复自定义表达式可维护

如果您考虑到性能,那么最好在需要时重复表达式。具体来说,不要尝试将它们放在用户定义的函数中。众所周知,它们会使sql Server中的查询变慢。

话虽如此,sql Server中至少有两种方法可以使查询在不影响性能的情况下更具可读性:

使用CTE的示例:

WITH
CTE
AS
(

    SELECT
        ...
        , DATEDIFF(DAY, U.DateCreated, GETUTCDATE()) AS CalculatedColumn
        ...
    FROM
        dbo.AspNetUsers U

)
SELECT
    ...
    CalculatedColumn
    ...
FROM CTE
WHERE
    CalculatedColumn < 3
;

使用示例CROSS APPLY

而不是在以下查询中重复公式的某些部分:

SELECT
    ColA + ColB AS ColSum
    ,ColA - ColB AS ColDiff
    ,(ColA + ColB) * (ColA - ColB) AS Result
    ,(ColA + ColB) * (ColA - ColB) * 100.0 AS Percentage
FROM Table

您可以CROSS APPLY这样写:

SELECT
    ColSum
    ,ColDiff
    ,Result
    ,Result * 100.0 AS Percentage
FROM
    Table
    CROSS APPLY
    (
        SELECT
            ColA + ColB AS ColSum
            ,ColA - ColB AS ColDiff
    ) AS A1
    CROSS APPLY
    (
        SELECT ColSum * ColDiff AS Result
    ) AS A2

顺便说一句,谈到性能

WHERE DATEDIFF(DAY, U.DateCreated, GETUTCDATE()) < 3

太糟糕了,因为它不能使用索引DateCreated(因为您将列包装在函数中)。

您最好将其重写为类似

WHERE U.DateCreated > DATEADD(DAY, -3, GETUTCDATE())
SQLServer 2022/1/1 18:44:05 有438人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶