数码控科技猎奇Iphone动漫星座游戏电竞lolcosplay王者荣耀攻略allcnewsBLOGNEWSBLOGASKBLOGBLOGZSK全部技术问答问答技术问答it问答代码软件新闻开发博客电脑/网络手机/数码笔记本电脑互联网操作系统软件硬件编程开发360产品资源分享电脑知识文档中心IT全部全部分类全部分类技术牛文全部分类教程最新网页制作cms教程平面设计媒体动画操作系统网站运营网络安全服务器教程数据库工具网络安全软件教学vbscript正则表达式javascript批处理更多»编程更新教程更新游戏更新allitnewsJava新闻网络医疗信息化安全创业站长电商科技访谈域名会议专栏创业动态融资创投创业学院 / 产品经理创业公司人物访谈营销开发数据库服务器系统虚拟化云计算嵌入式移动开发作业作业1常见软件all电脑网络手机数码生活游戏体育运动明星影音休闲爱好文化艺术社会民生教育科学医疗健康金融管理情感社交地区其他电脑互联网软件硬件编程开发360相关产品手机平板其他电子产品摄影器材360硬件通讯智能设备购物时尚生活常识美容塑身服装服饰出行旅游交通汽车购房置业家居装修美食烹饪单机电脑游戏网页游戏电视游戏桌游棋牌游戏手机游戏小游戏掌机游戏客户端游戏集体游戏其他游戏体育赛事篮球足球其他运动球类运动赛车健身运动运动用品影视娱乐人物音乐动漫摄影摄像收藏宠物幽默搞笑起名花鸟鱼虫茶艺彩票星座占卜书画美术舞蹈小说图书器乐声乐小品相声戏剧戏曲手工艺品历史话题时事政治就业职场军事国防节日风俗法律法规宗教礼仪礼节自然灾害360维权社会人物升学入学人文社科外语资格考试公务员留学出国家庭教育学习方法语文物理生物工程学农业数学化学健康知识心理健康孕育早教内科外科妇产科儿科皮肤科五官科男科整形中医药品传染科其他疾病医院两性肿瘤科创业投资企业管理财务税务银行股票金融理财基金债券保险贸易商务文书国民经济爱情婚姻家庭烦恼北京上海重庆天津黑龙江吉林辽宁河北内蒙古山西陕西宁夏甘肃青海新疆西藏四川贵州云南河南湖北湖南山东江苏浙江安徽江西福建广东广西海南香港澳门台湾海外地区

ADO.net超时,查询分析器很快的问题-CSDN论坛

来源:互联网  责任编辑:小易  时间:2018/1/19 19:37:25
本网有用户碰到这样的问题:ADO.net超时,查询分析器很快的问题-CSDN论坛,具体问题如下:

本网根据需求用户需求,为用户寻得以下其他网友提供的解决方法,方法仅供参考,具体如下:

解决方案1:

既然查询分析器很快,那么你在调试时。执行完sql后,返回结果快吗?

还有,数据库连接字符串,和你直接执行sql的数据库,是同一个吗?

解决方案2:

引用 1 楼 hanjun0612 的回复:
既然查询分析器很快,那么你在调试时。执行完sql后,返回结果快吗?

还有,数据库连接字符串,和你直接执行sql的数据库,是同一个吗?


一个update,没有返回。

数据库连接字符串一模一样。

解决方案3:

引用 2 楼 yuwenge 的回复:
Quote: 引用 1 楼 hanjun0612 的回复:

既然查询分析器很快,那么你在调试时。执行完sql后,返回结果快吗?

还有,数据库连接字符串,和你直接执行sql的数据库,是同一个吗?


一个update,没有返回。

数据库连接字符串一模一样。

你可以逐步调试,看代码中excute你的sql是不是速度也很快。然后看看到底是哪里耗时比较长

解决方案4:

引用 3 楼 hanjun0612 的回复:
Quote: 引用 2 楼 yuwenge 的回复:

Quote: 引用 1 楼 hanjun0612 的回复:

既然查询分析器很快,那么你在调试时。执行完sql后,返回结果快吗?

还有,数据库连接字符串,和你直接执行sql的数据库,是同一个吗?


一个update,没有返回。

数据库连接字符串一模一样。

你可以逐步调试,看代码中excute你的sql是不是速度也很快。然后看看到底是哪里耗时比较长

调试了,就是代码中excute我的SQL超时,执行完要超过30s,而查询分析器为0秒。

解决方案5:

不应该啊。你跨库操作了吗?

解决方案6:

引用 5 楼 hanjun0612 的回复:
不应该啊。你跨库操作了吗?


没有,而且只对一张表操作,操作数据只有2000行

解决方案7:


 declare @FilterType nvarchar
 set @FilterType='1'
 update TipsterFilterObject set CalculatePoints=
 iif((select STDEV(hitrate) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType )=0,0, 0.3*1000*(hitrate-(select AVG(hitrate) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType))/(select STDEV(hitrate) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType))
 +iif((select STDEV(profit) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType)=0,0, 0.3*1000*(profit-(select AVG(profit) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType))/(select STDEV(profit) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType))
 +iif((select STDEV(profitbillity) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType)=0,0, 0.1*1000*(profitbillity-(select AVG(profitbillity)  from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType))/(select STDEV(profitbillity)  from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType))
 +iif((select STDEV(tipscount) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType)=0,0, 0.1*1000*(tipscount-(select AVG(tipscount) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType))/(select STDEV(tipscount) from TipsterFilterObject with(NOLOCK) where  FilterType=@FilterType))
 +iif((select STDEV(redtimescount) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType)=0,0, 0.2*1000*(redtimescount-(select AVG(redtimescount) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType))/(select STDEV(redtimescount) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType)) where  FilterType=@FilterType


脚本如上,NOLOCK是后加的,然并卵。

解决方案8:

将这段sql作为存储过程,然后程序里执行存储过程。

解决方案9:

excute只支持单条命令,而你的语句时批处理的。
所以应该 调用存储过程 的方式来执行

解决方案10:

ADO.NET 改用调存储过程

解决方案11:

https://lostechies.com/jimmybogard/2012/07/18/troubleshooting-sql-index-performance-on-varchar-columns/
估计你就是因为类似这种的隐式转换问题吧
我反正就碰到过数据库是Varchar,我指定的param参数是String,也就是NVarchar,然后查询起码也有1分钟的样子,而在查询分析器里面就是秒查,改成一致后,查询就秒查了

解决方案12:

sqlhelper底层那块应该有点问题。看看是否close了,实在测试不出来,就先不用你们的底层,自己简单的update下,看看执行效率如何。

解决方案13:

引用 11 楼 starfd 的回复:
https://lostechies.com/jimmybogard/2012/07/18/troubleshooting-sql-index-performance-on-varchar-columns/
估计你就是因为类似这种的隐式转换问题吧
我反正就碰到过数据库是Varchar,我指定的param参数是String,也就是NVarchar,然后查询起码也有1分钟的样子,而在查询分析器里面就是秒查,改成一致后,查询就秒查了


我的其实是int。。。无论改什么都一样。

解决方案14:

引用 10 楼 Chinajiyong 的回复:
ADO.NET 改用调存储过程


改成存储过程之后,在查询分析器里执行存储过程都需要30s了。

解决方案15:

你说的查询分析器是指?你这个毫秒级不靠谱吧。

解决方案16:

引用 15 楼 D56233577 的回复:
你说的查询分析器是指?你这个毫秒级不靠谱吧。


就是 Microsoft SQL Server Management Studio

毫秒级就是执行时间显示0s

解决方案17:

引用 16 楼 yuwenge 的回复:
就是 Microsoft SQL Server Management Studio
毫秒级就是执行时间显示0s


你用ADO.NET执行SELECT NEWID()多久返回?

解决方案18:

引用 17 楼 D56233577 的回复:
Quote: 引用 16 楼 yuwenge 的回复:

就是 Microsoft SQL Server Management Studio
毫秒级就是执行时间显示0s


你用ADO.NET执行SELECT NEWID()多久返回?

秒回。

解决方案19:

引用 7 楼 yuwenge 的回复:

 declare @FilterType nvarchar
 set @FilterType='1'
 update TipsterFilterObject set CalculatePoints=
 iif((select STDEV(hitrate) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType )=0,0, 0.3*1000*(hitrate-(select AVG(hitrate) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType))/(select STDEV(hitrate) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType))
 +iif((select STDEV(profit) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType)=0,0, 0.3*1000*(profit-(select AVG(profit) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType))/(select STDEV(profit) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType))
 +iif((select STDEV(profitbillity) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType)=0,0, 0.1*1000*(profitbillity-(select AVG(profitbillity)  from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType))/(select STDEV(profitbillity)  from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType))
 +iif((select STDEV(tipscount) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType)=0,0, 0.1*1000*(tipscount-(select AVG(tipscount) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType))/(select STDEV(tipscount) from TipsterFilterObject with(NOLOCK) where  FilterType=@FilterType))
 +iif((select STDEV(redtimescount) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType)=0,0, 0.2*1000*(redtimescount-(select AVG(redtimescount) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType))/(select STDEV(redtimescount) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType)) where  FilterType=@FilterType


脚本如上,NOLOCK是后加的,然并卵。


这么多个子查询?我从来没见过程序员能写出这么糟糕的 sql,你是怎么做的?

解决方案20:

你就看看你有多少个“from TipsterFilterObject where FilterType=@FilterType”吧!

还有,谁告诉你说可以滥用“with (nolock)”的了?

解决方案21:

引用 20 楼 sp1234 的回复:
你就看看你有多少个“from TipsterFilterObject where FilterType=@FilterType”吧!
还有,谁告诉你说可以滥用“with (nolock)”的了?


DECLARE @FilterType NVARCHAR
SET @FilterType = '1'
;WITH t AS (
SELECT 
STDEV(hitrate) AS hitrate_STDEV
,AVG(hitrate)AS hitrate_AVG
,STDEV(profit) AS profit_STDEV
,AVG(profit)AS profit_AVG
,STDEV(profitbillity) AS profitbillity_STDEV
,AVG(profitbillity)AS profitbillity_AVG
,STDEV(tipscount) AS tipscount_STDEV
,AVG(tipscount)AS tipscount_AVG
,STDEV(redtimescount) AS redtimescount_STDEV
,AVG(redtimescount)AS redtimescount_AVG
   FROM   TipsterFilterObject
   WHERE  FilterType         = @FilterType
)
UPDATE TipsterFilterObject
SET    CalculatePoints = IIF(t.hitrate_STDEV= 0,0, 0.3 * 1000 * ( hitrate -t.hitrate_AVG) / t.hitrate_STDEV)
       + IIF(t.profit_STDEV= 0,0, 0.3 * 1000 * ( profit -t.profit_AVG) / t.profit_STDEV)
       + IIF(t.profitbillity_STDEV= 0,0, 0.1 * 1000 * ( profitbillity - t.profitbillity_AVG) / t.profitbillity_STDEV)
       + IIF(t.tipscount_STDEV= 0,0, 0.1 * 1000 * ( tipscount -t.tipscount_AVG) / t.tipscount_STDEV)
       + IIF(t.redtimescount_STDEV= 0,0, 0.2 * 1000 * ( redtimescount -t.redtimescount_AVG) / t.redtimescount_STDEV)
FROM t
WHERE  FilterType= @FilterType

楼主换这个试试

解决方案22:

引用 19 楼 sp1234 的回复:
Quote: 引用 7 楼 yuwenge 的回复:


 declare @FilterType nvarchar
 set @FilterType='1'
 update TipsterFilterObject set CalculatePoints=
 iif((select STDEV(hitrate) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType )=0,0, 0.3*1000*(hitrate-(select AVG(hitrate) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType))/(select STDEV(hitrate) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType))
 +iif((select STDEV(profit) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType)=0,0, 0.3*1000*(profit-(select AVG(profit) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType))/(select STDEV(profit) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType))
 +iif((select STDEV(profitbillity) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType)=0,0, 0.1*1000*(profitbillity-(select AVG(profitbillity)  from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType))/(select STDEV(profitbillity)  from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType))
 +iif((select STDEV(tipscount) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType)=0,0, 0.1*1000*(tipscount-(select AVG(tipscount) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType))/(select STDEV(tipscount) from TipsterFilterObject with(NOLOCK) where  FilterType=@FilterType))
 +iif((select STDEV(redtimescount) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType)=0,0, 0.2*1000*(redtimescount-(select AVG(redtimescount) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType))/(select STDEV(redtimescount) from TipsterFilterObject with(NOLOCK) where FilterType=@FilterType)) where  FilterType=@FilterType


脚本如上,NOLOCK是后加的,然并卵。


这么多个子查询?我从来没见过程序员能写出这么糟糕的 sql,你是怎么做的?


因为整张表只有2000行数据,所以就这么写的。

大婶还是一如既往的光埋汰人,不帮助解决实际问题啊。后来改了with as ,也木有什么卵用。

解决方案23:

引用 21 楼 yenange 的回复:
Quote: 引用 20 楼 sp1234 的回复:

你就看看你有多少个“from TipsterFilterObject where FilterType=@FilterType”吧!
还有,谁告诉你说可以滥用“with (nolock)”的了?


DECLARE @FilterType NVARCHAR
SET @FilterType = '1'
;WITH t AS (
SELECT 
STDEV(hitrate) AS hitrate_STDEV
,AVG(hitrate)AS hitrate_AVG
,STDEV(profit) AS profit_STDEV
,AVG(profit)AS profit_AVG
,STDEV(profitbillity) AS profitbillity_STDEV
,AVG(profitbillity)AS profitbillity_AVG
,STDEV(tipscount) AS tipscount_STDEV
,AVG(tipscount)AS tipscount_AVG
,STDEV(redtimescount) AS redtimescount_STDEV
,AVG(redtimescount)AS redtimescount_AVG
   FROM   TipsterFilterObject
   WHERE  FilterType         = @FilterType
)
UPDATE TipsterFilterObject
SET    CalculatePoints = IIF(t.hitrate_STDEV= 0,0, 0.3 * 1000 * ( hitrate -t.hitrate_AVG) / t.hitrate_STDEV)
       + IIF(t.profit_STDEV= 0,0, 0.3 * 1000 * ( profit -t.profit_AVG) / t.profit_STDEV)
       + IIF(t.profitbillity_STDEV= 0,0, 0.1 * 1000 * ( profitbillity - t.profitbillity_AVG) / t.profitbillity_STDEV)
       + IIF(t.tipscount_STDEV= 0,0, 0.1 * 1000 * ( tipscount -t.tipscount_AVG) / t.tipscount_STDEV)
       + IIF(t.redtimescount_STDEV= 0,0, 0.2 * 1000 * ( redtimescount -t.redtimescount_AVG) / t.redtimescount_STDEV)
FROM t
WHERE  FilterType= @FilterType

楼主换这个试试


多谢,后来改了with as。但是之前加了几个索引之后,性能问题解决了。所以也不知道到底是with 起作用了,还是索引起作用了。

解决方案24:

引用 23 楼 yuwenge 的回复:
Quote: 引用 21 楼 yenange 的回复:

Quote: 引用 20 楼 sp1234 的回复:

你就看看你有多少个“from TipsterFilterObject where FilterType=@FilterType”吧!
还有,谁告诉你说可以滥用“with (nolock)”的了?


DECLARE @FilterType NVARCHAR
SET @FilterType = '1'
;WITH t AS (
SELECT 
STDEV(hitrate) AS hitrate_STDEV
,AVG(hitrate)AS hitrate_AVG
,STDEV(profit) AS profit_STDEV
,AVG(profit)AS profit_AVG
,STDEV(profitbillity) AS profitbillity_STDEV
,AVG(profitbillity)AS profitbillity_AVG
,STDEV(tipscount) AS tipscount_STDEV
,AVG(tipscount)AS tipscount_AVG
,STDEV(redtimescount) AS redtimescount_STDEV
,AVG(redtimescount)AS redtimescount_AVG
   FROM   TipsterFilterObject
   WHERE  FilterType         = @FilterType
)
UPDATE TipsterFilterObject
SET    CalculatePoints = IIF(t.hitrate_STDEV= 0,0, 0.3 * 1000 * ( hitrate -t.hitrate_AVG) / t.hitrate_STDEV)
       + IIF(t.profit_STDEV= 0,0, 0.3 * 1000 * ( profit -t.profit_AVG) / t.profit_STDEV)
       + IIF(t.profitbillity_STDEV= 0,0, 0.1 * 1000 * ( profitbillity - t.profitbillity_AVG) / t.profitbillity_STDEV)
       + IIF(t.tipscount_STDEV= 0,0, 0.1 * 1000 * ( tipscount -t.tipscount_AVG) / t.tipscount_STDEV)
       + IIF(t.redtimescount_STDEV= 0,0, 0.2 * 1000 * ( redtimescount -t.redtimescount_AVG) / t.redtimescount_STDEV)
FROM t
WHERE  FilterType= @FilterType

楼主换这个试试


多谢,后来改了with as。但是之前加了几个索引之后,性能问题解决了。所以也不知道到底是with 起作用了,还是索引起作用了。

可以删除索引, 再试下效果。
没事就结贴吧。

  • 本文相关:
  • 站长必读,如何真正写好一篇原创文章
  • 互联网之路细嗅蔷薇 资深站长分享掘金之道
  • 企业站的站长的工作重心究竟有哪些
  • 浅析:行业门户网站的一些盈利模式
  • 3000IP的企业网站每天订单不到30个的苦恼
  • 网站想内外兼修?先学习提高网站可用性的6大原则
  • 浅谈网页设计中的简约之美
  • 网页改版实战:日本设计师如何彻底优化旅游网站?
  • 网页改版实战!日本设计师如何彻底优化招聘网站?
  • 2015年值得关注的21个网页设计趋势
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved