首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

一条SQL,执行要10分钟才能出数据,表ST_RIVER_R的数据有大概5万条,其他都不超过1千,求大神看看你为什么这么慢,然后该如何改?小弟先谢过

2012-12-15 
一条SQL,执行要10分钟才能出数据,表ST_RIVER_R的数据有大概5万条,其他都不超过1千,求大神看看你为什么这么

一条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同时帮忙看看这个问题


[其他解释]
CSdn处处有高人啊
[其他解释]
想过用临时表吗?也许比你最初的写法快些。
[其他解释]
看代码有这么多子查询,或许可以用临时表或者表变量来保存重复使用的数据
[其他解释]

引用:
SQL code?1234567891011121314/*你的代码应该就是下面这个意思。运行在2005及以上环境。你的SQL 思维太乱了。SQL 不是需要每张表都把需要的字段弄成子查询查出来再关联的。*/SELECT     B.stnm    ,A.name    ,D.Z    ,D.TM    ,'currentvalue' = (case when D.Z > ……

  多谢各位 已经解决 因为之前对sql 只是会简单的增撒查改 然后 项目又要得急 只能用子查询拼出来了

热点排行