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

一条SQL,执行要10分钟才能出数据,表ST_RIVER_R的数据有大概5万条,其他都不超过1千,求大神看看你为什么这么慢,然后该怎么改?急·····小弟先谢过
select  
STBPRP.stnm,
STBPRP.name,r.Z,r.TM,
'currentvalue' = (case when r.Z > b.fooldLevel then r.Z - b.fooldLevel else b.fooldLevel-r.Z  end)
,'flag'=(case when r.Z > b.fooldLevel then 1 else 0  end) 
from Rain_alarm b,
(select tem.STCD,tem.TM,tem.Z from ST_RIVER_R tem where TM=(select top 1 TM  from ST_RIVER_R where STCD=tem.STCD order BY TM desc)) r,
(select t.stnm,name,t.stcd from TownshipInfo ,
(select stnm,townshipInfoId,stcd from ST_STBPRP_B where sttp in('PQ','ZZ','PZ')) t 
where  t.townshipInfoId=id) STBPRP where STBPRP.stcd=r.STCD and STBPRP.stcd=b.STCD
------最佳解决方案--------------------
表ST_RIVER_R 上 TM列创建索引 试试。
------其他解决方案--------------------
看执行计划,是哪一步的百分比最高。
------其他解决方案--------------------
其实这些性能问题,还是要看执行计划,光看语句很难判断,看看是否存在表扫描、丢失索引、丢失统计信息等等。
------其他解决方案--------------------

/*你的代码应该就是下面这个意思。运行在2005及以上环境。你的SQL 思维太乱了。SQL 不是需要每张表都把需要的字段弄成子查询查出来再关联的。*/
SELECT 
B.stnm
,A.name
,D.Z
,D.TM
,'currentvalue' = (case when D.Z > C.fooldLevel then D.Z - C.fooldLevel else C.fooldLevel-D.Z end)
,'flag'=(case when D.Z > C.fooldLevel then 1 else 0 end)  
FROM TownshipInfo A 
  JOIN ST_STBPRP_B B ON A.id = B.townshipInfoId 
  JOIN Rain_alarm C ON B.stcd = C.stcd
  CROSS APPLY (SELECT TOP 1 * FROM ST_RIVER_R WHERE STCD = B.stcd ORDER BY TM DESC) D
WHERE B.sttp in('PQ','ZZ','PZ')

------其他解决方案--------------------
引用:
表ST_RIVER_R 上 TM列创建索引 试试。

怎么建?
------其他解决方案--------------------
        CREATE NONCLUSTERED INDEX Nonclustered_TownshipInfo ON TownshipInfo (STCD)
        CREATE NONCLUSTERED INDEX Nonclustered_Rain_alarm ON Rain_alarm (STCD)

------其他解决方案--------------------
引用:
看执行计划,是哪一步的百分比最高。

额·······只是偶尔用下简单的查询,不是很懂数据库,不懂存储过程,求大神细讲
------其他解决方案--------------------
引用:
引用:

表ST_RIVER_R 上 TM列创建索引 试试。

怎么建?

create index IX_TM on ST_RIVER_R(TM)
------其他解决方案--------------------
http://topic.csdn.net/u/20121031/18/f7328c3c-2f05-4f11-a6cc-3c3143f900ff.html同时帮忙看看这个问题
------其他解决方案--------------------
http://topic.csdn.net/u/20121031/18/f7328c3c-2f05-4f11-a6cc-3c3143f900ff.html同时帮忙看看这个问题