SQL Server Update 语句个别记录运行较慢,其他记录速度正常,求帮助

weixin_38072180 2016-12-08 12:49:48
先描述一下情况
我的程序使用WCF从客户端向服务器上传数据,每次上传64条记录。WCF服务器收到64条记录后通过一个for循环依次将每条记录写入SQL
Server 2008数据库
foreach(Data d in Datas)
{
bool isExist = SelectInDB("Select count(*) from ReceiveData Where id=@id And tableNO=@tableNO And Board=@Board")

if (isExist)
InsertToDB();
else
UpdateToDB("Update ReceiveData Set A=@A, B=@B Where id=@id And tableNO=@tableNO And Board=@Boards");
}
大部分情况下都工作的非常好,通常64条记录需要2秒钟的时间。
但是个别记录需要的时间就比较长了,大约每条记录1秒钟,64条记录需要一份多钟。
这种情况的区分可以通过id字段分别出来,(id,使用GUID)。ReceiveData表的主键为id,TableNO, Board.
也就是说只要id相同那么就都会慢。而其他的id速度就都是正常的。
ReceiveData表做了分区140多万条记录

自己找了一下午问题,也没有个头绪,希望有知道原因帮忙,能给指引一下方向也好。先谢过
...全文
61 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38113797 2016-12-09
  • 打赏
  • 举报
回复
用SQL Server Profiler 跟踪一下SQL脚本,再分相一下这些脚本,哪里会慢(耗费时间长)
如果数据库层没找到的原因,就尝试用.net performance profiler跟踪并分析下程序代码,定位下看是哪几行代码耗费的时间长。
专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms
weixin_38109453 2016-12-09
  • 打赏
  • 举报
回复
你好,
根据你的描述,大部分情况下都工作的非常好, 应该不是ADO.Net的问题。 建议检查一下数据库。 使用相同的语句在数据库里通过SQL 脚本插入试试。 在根据SQL的性能分析看看问题。
根据我的经验,应该是建立索引消耗的时间比较长。因为是联合主键,所有数据是按照这个顺序存储的, 如果插入重复的值,会打乱原有顺序,重新拆表,
Best regards,
Cole Wu

476

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧