为了账号安全,请及时绑定邮箱和手机立即绑定

使用存储过程的问题以及下一步做什么

使用存储过程的问题以及下一步做什么

C#
杨__羊羊 2021-11-28 17:49:31
更新:按照建议,我会问两个分开的问题,并详细说明。这可能是一个由两部分组成的问题,也可能是一个常见问题,但我无法弄清楚。我们有一个 .net Web 服务,它使用实体框架和针对 SQL Server 2012 的代码优先方法(我认为)。我们有几桌有的叫User,License,Product等。我们不断需要从数据库中获取有关用户、他们的许可证和产品的数据。对于这些数据,我们执行一个相当大的存储过程,该过程访问所有表,进行一些处理并交付数据,例如,具有此用户 ID 的用户拥有与这些产品相关的这些角色的许可证。然而,这个存储过程的执行似乎随着时间的推移而倒退,并且在白天变得更慢。为了防止这种情况,我们每天早上都会对索引进行优化。如果不是每天早上都执行优化,则存储过程的执行时间将从 200 毫秒变为 2000 毫秒。如果有人对正在发生的事情有洞察力,我将不胜感激。我对 SQL 和 SQL Server 的了解有限。然而,为了避免有关存储过程的这些问题,我们决定重新考虑我们的策略。现在,我们已经创建了一个新表,其中包含来自其他表的键值,例如 userid、license id、role、productid。但是,这意味着每次更改其他表时,我们都必须维护这个新表。所以,我的第二部分问题是。是包含我们可以轻松获取有效方法的键值的新表还是我们应该完全做其他事情?
查看完整描述

2 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

由于白天的插入或更新,索引可能会变得碎片化。您可以考虑列存储索引。尝试使用 SSMS 查询优化工具。如果适用,还可以考虑使用循环连接来提示查询优化器。


查看完整回答
反对 回复 2021-11-28
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

在真空中很难回答。您可能会因大量插入而出现索引问题,我猜测 GUID 是一个键,或者您可能会因负载过重而出现阻塞问题,由于内存不足或旧统计信息等原因可能会导致 tempdb 溢出。这都是猜谜游戏。我能给你的最好的建议是聘请专业人士,因为有一天你将不得不,在列表中它不会像没有线索的人那样认为他们在修理东西(因为所有的开发人员都是“聪明的”)。在列表中进行咨询,因为不查看问题,几乎不可能给您答案。在列表中,您需要发布存储过程的执行计划。


查看完整回答
反对 回复 2021-11-28
  • 2 回答
  • 0 关注
  • 152 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信