sql - 存储过程重构
问题描述
我正在考虑重构这个存储过程,因为它似乎正在使用 100% 的 DTU 容量导致 Azure DB 超时。
有人对我如何改进存储过程中使用的 SQL 有任何建议吗?
谢谢
declare @value bigint
declare @secondValue bigint
select @value = count(*) from [dbo].[myTable]
where ([Name] = 'something') AND ([Type] = 'paid') AND profilestatus = 'something'
and ExpiresOn >= CURRENT_TIMESTAMP
select @trialing = count(*) from [dbo].[myTable]
where ([Name] = 'something') AND ([Type] = 'avalue') AND profilestatus = 'something'
and ExpiresOn >= CURRENT_TIMESTAMP
select @value as firstValue, @secondValue as secondValue
客户统计:
解决方案
我看到您想要获取两个计数 - [Type] 的两个值中的每一个,在这种情况下 agroup by
应该会显着提高您的性能:
select [Type], count(*) AS cnt
from [dbo].[myTable]
where ([Name] = 'something') AND ([Type] IN ('paid', 'avalue')) AND profilestatus = 'something' AND ExpiresOn >= CURRENT_TIMESTAMP
group by [Type]
您可以将该查询合并到您的存储过程中,期望结果集中有两条记录。
推荐阅读
- php - 从会话购物车中读取多个项目时出现问题
- javascript - 使用 jQuery-EasyFilter 过滤“多类别”
- json - VBA-JSON parser v2.2.3 运行时不一致
- java - 是否可以将数字分配给字符串,然后将这些数字放入出队系统中?
- javascript - 如何显示/隐藏什么时候
被选中/未选中? - c# - 使用模板和创建冲突来创建人员对象
- excel - 如何在word文档中表格的同一单元格中添加2张来自excel的jpeg图片?
- cassandra - 无法使用 brew 在本地运行 Cassandra
- vba - 根据匹配结果从 wkbk 1 返回值到 wkbk 2
- node.js - 围绕事件流 mapSync() 的承诺不起作用