繁体   English   中英

SQL Server性能和查询执行

[英]SQL Server Performance and Query Execution

在困难时期前的几天..,

我已经为大学生开发了在线入学申请流程,并且非常成功。

让我解决我面临的问题,

  1. 问题涉及2个表: Student_AdmissionDetails (包含近30-35个字段,其中大多数具有nvarchar(70)的数据类型),另一个是StudentCategory
  2. 从录取过程开始的几天后,Student_AdmissionDetails大约有300万条记录,而StudentCategory则有4条记录
  3. 我开发了一个仪表板,假设该仪表板显示每个类别中没有应用的学生人数。 为了实现这一点,我有以下查询。

    Select count(*)
    from Student_AdmissionDetails
    inner join StudentCategory
    on Student_AdmissionDetails.Id=StudentCategory.Id
    where CategoryTypeName=@ParameterValue

上面的查询在单页上被触发3次。 大约有250-300名用户同时访问同一页面。除了录取表格,还有1300-2000名学生同时填写表格。

我得到的问题是,当我在sql服务器中运行以上查询时,它在5次中被触发了1次。 它引发错误,指出从内存访问对象时发生了死锁 (请原谅我没有记住确切的错误)。

我从以下帖子中寻找的是:

  • 这次我很幸运,我没有因为编码而使某人感到不高兴,但是有人可以让我知道如何克服这种情况。 什么是处理大型数据库的最佳方法
  • 我试图用SQL事件探查器解决这个问题,但是由于有5个以上的应用程序正在运行类似的矿井,所以我无法找出有多少用户试图访问同一资源。

我想以下几点将有助于回答我的问题。

  • 应用服务器和数据库服务器不同
  • DB服务器正在Windows XP上运行(我想是!),它的RAM为128 GB
  • 当我从SQL Server执行查询时,平均需要12-15秒才能执行查询。

很抱歉写了这么长时间,但是我真的需要帮助来学习:)

尝试通过添加WITH (NOLOCK)更新您的SELECT语句。 这会使您的结果不太精确,但似乎足以满足您的仪表板要求。

另外,最好在WHERE子句中使用类似于整数CategoryTypeId不要使用CategoryTypeName

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM