日期:2014-05-17  浏览次数:20657 次

SQL 语句在sql里运行很快,但是在项目中慢
我写的语句
select count(distinct GK.localId) from
GoogleKeyword GK
left outer JOIN GoogleKeywordReport GKR ON GK.backId = GKR.backKeywordId
AND GKR.reportDate BETWEEN #{startDay} AND #{endDay}
right outer JOIN GoogleAdGroup GA ON GK.localAdGroupId = GA.localId
right outer JOIN GoogleCampaign GC ON GK.localCampaignId = GC.localId
where GK.accountId = #{accountId}

数据将近10万条,后期还会增加。
在Microsoft sql 2005中运行很快,但是在项目中运行时,会卡在sql的执行

------解决方案--------------------
数据库压力如何
------解决方案--------------------
10万行并不算啥,核心问题是:是否有全表扫描或全索引扫描之类的遍历型操作。

所以:做SQL执行计划分析,是否符合预期,检查索引是否齐备。


不过,感觉你这个SQL,表连接数量比较多,这个。。。。。。有时间检查下数据模型设计是否合理。
------解决方案--------------------
既然在Microsoft sql 2005执行很快,那就和SQL关系不大,这个应该从代码上检查是不是出问题,如果有用到连接池,就要关注连接是否有关闭,是否并发太多等等。。。。。。

还有注意WEB服务器连接数据库直接是否有问题
------解决方案--------------------
引用:
既然在Microsoft sql 2005执行很快,那就和SQL关系不大,这个应该从代码上检查是不是出问题,如果有用到连接池,就要关注连接是否有关闭,是否并发太多等等。。。。。。

还有注意WEB服务器连接数据库直接是否有问题


10万数据真的不大
你的语句真的不够优化
你的问题大概真的不是由于你这个有一点小问题的语句产生的
------解决方案--------------------
是Java应用还是Net应用呢?如果是Java应用的话避免用ODBC和数据库连接。
显示SQL应该没有性能问题,是不是应用和数据库建立的连接没有及时close?

------解决方案--------------------
是Java应用还是Net应用呢?如果是Java应用的话避免用ODBC和数据库连接。
显示SQL应该没有性能问题,是不是应用和数据库建立的连接没有及时close?
------解决方案--------------------
要关注连接是否有关闭,是否并发太多等等 还有注意WEB服务器连接数据库直接是否有问题




------解决方案--------------------
本机运行一次 以后的查询都会很快