求大神优化SQL,并帮忙看下这语句大并发会发生死锁吗?

匿名用户_999 2016-08-17 11:29:52
SQL语句如下:
UPDATE tb_CompanyMobiles SET IsDownload='true',DownloadTime=getdate()
OUTPUT DELETED.MOBILE
WHERE ID IN(SELECT TOP 5 ID FROM tb_CompanyMobiles WHERE UserId=1 AND IsDownload='false' ORDER BY ID ASC)

这语句有时在并发下,会没有输出数据,不知道什么情况。
还有,这句语句大并发下会发生死锁吗?求大神优化方案,谢谢。
...全文
559 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2016-08-19
  • 打赏
  • 举报
回复
估计我提供的语句估计比你贴出来的语句提高性能1倍左右,没过索引的情况下 只要的SQL2005以上版本都可用
中国风 2016-08-19
  • 打赏
  • 举报
回复
Create index IX_tb_CompanyMobiles_UserId_IsDownload ON tb_CompanyMobiles(UserId,IsDownload) 建上索引提高性能 http://blog.csdn.net/roy_88/article/details/2682044 http://bbs.csdn.net/topics/250022124
匿名用户_999 2016-08-19
  • 打赏
  • 举报
回复
引用 6 楼 roy_88 的回复:
UPDATE t SET IsDownload='true',DownloadTime=getdate()  OUTPUT DELETED.MOBILE  FROM (SELECT * ,ROW_NUMBER()OVER(ORDER BY ID ASC) AS RN FROM tb_CompanyMobiles WHERE UserId=1 AND IsDownload='false' ) AS T WHERE RN<=5
把条件没索引时加上,把语句改为以上方法
我的表就只有ID为聚集索引,没建其他索引了。用这语句应该没问题吧,版主大人?
中国风 2016-08-18
  • 打赏
  • 举报
回复
UPDATE t SET IsDownload='true',DownloadTime=getdate()  OUTPUT DELETED.MOBILE  FROM (SELECT * ,ROW_NUMBER()OVER(ORDER BY ID ASC) AS RN FROM tb_CompanyMobiles WHERE UserId=1 AND IsDownload='false' ) AS T WHERE RN<=5
把条件没索引时加上,把语句改为以上方法
薛定谔的DBA 2016-08-18
  • 打赏
  • 举报
回复
有查询,有更新,若是没有好的索引,会死锁
卖水果的net 2016-08-18
  • 打赏
  • 举报
回复
并发多了,说明这条语应该要改善一下,或机器的配置要提高一些; 一条语句不会产生死锁,只会有等待;
匿名用户_999 2016-08-18
  • 打赏
  • 举报
回复
引用 3 楼 wmxcn2000 的回复:
并发多了,说明这条语应该要改善一下,或机器的配置要提高一些; 一条语句不会产生死锁,只会有等待;
求版主大人优化方案,谢谢,机器配置8核 8G,还可以了
匿名用户_999 2016-08-17
  • 打赏
  • 举报
回复
引用 1 楼 kingtiy 的回复:
没有输出数据,说明是没有符合条件的数据吧.
有符合条件的数据,平时测试都没什么问题,大并发就出问题了,很奇怪。
kingtiy 2016-08-17
  • 打赏
  • 举报
回复
没有输出数据,说明是没有符合条件的数据吧.

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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