栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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

  1. CTE
  2. CROSS APPLY

使用CTE的示例:

WITHCTEAS(    SELECt        ...        , DATEDIFF(DAY, U.DateCreated, GETUTCDATE()) AS CalculatedColumn        ...    FROM        dbo.AspNetUsers U)SELECt    ...    CalculatedColumn    ...FROM CTEWHERe    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 PercentageFROM Table

您可以

CROSS APPLY
这样写:

SELECt    ColSum    ,ColDiff    ,Result    ,Result * 100.0 AS PercentageFROM    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())


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/612200.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号