首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL视图:优化实时数据

SQL视图:优化实时数据
EN

Stack Overflow用户
提问于 2020-02-12 03:20:38
回答 1查看 62关注 0票数 1

我在运行一段时间的查询时遇到问题。

场景是这样的:我在一个视图中填充了一个效率指标,接受来自另一个视图的输入。此计算使用GETUTCDATE(),我只是根据我的时区进行调整。我是通过使用"BuildTime“列值来计算效率,而不是从当天上午7:00起经过了多少时间(例如,如果从早上7:00到现在已经过去了120分钟,并且"BuildTime”等于120分钟,那么效率是100%。我还使用了一个CASE函数来仅计算操作时间之间的当前经过时间(7AM -3:30 am )

下面是代码:

代码语言:javascript
复制
SELECT
    md.Operator,

    CASE 
    WHEN DATEADD(HOUR, -6, GETUTCDATE()) > CONVERT(DATETIME, CONVERT(DATE, DATEADD(HOUR, -6, GETUTCDATE()))) + '7:00' AND GETDATE() < CONVERT(DATETIME, CONVERT(DATE, DATEADD(HOUR, -6, GETUTCDATE()))) + '15:30' THEN
    (SUM(isNull(md.TotalTime, 0)) + SUM(isNull(md.DelTime, 0))) * 1.0 / DATEDIFF(MINUTE, CONVERT(DATETIME, CONVERT(DATE, DATEADD(HOUR, -6, GETUTCDATE()))) + '7:00' , DATEADD(HOUR, -6, GETUTCDATE())) * 100.0
    ELSE (SUM(isNull(md.TotalTime, 0)) + SUM(isNull(md.DelTime, 0))) / 435 * 100.0
    END
    AS OpEfficiency


FROM [Booms MES Master Data] as md
WHERE md.[Date] = CONVERT(varchar(50), DATEADD(HOUR, -6, GETUTCDATE()), 101)
GROUP BY md.Operator

到目前为止,这段代码需要几秒钟才能运行。我想知道问题出在代码的什么地方?是我转换了太多的语句,还是嵌套的if函数有问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-12 10:03:57

如果您有一个非常大的数据集,作为经验法则,首先从您的固定值开始,并将您的转换限制为最少的字符数。在这种情况下,varchar( 10 )是因为101格式日期只有10个字符( '12/12/1234‘)。

代码语言:javascript
复制
WHERE CONVERT(varchar(10), DATEADD(HOUR, -6, GETUTCDATE()), 101) = md.[Date]

您可以使用Microsoft的Analyze an Actual Execution Plan来检测进一步的问题。

https://docs.microsoft.com/en-us/sql/relational-databases/performance/analyze-an-actual-execution-plan

如果代码在sql server 2012+上运行,还应考虑转换为日期而不是varchar。在sql server中,日期存储为两个整数。如果您有多年的数据,那么sql在排序后查找特定数字要比搜索按mm/dd/yy排序的字符串容易得多。

代码语言:javascript
复制
WHERE CONVERT(date, DATEADD(HOUR, -6, GETUTCDATE())) = CONVERT(date,md.[Date])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60175965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档