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

将sql代码速度变快解决方案

2012-12-17 
将sql代码速度变快请高手帮忙把这段代码的速度变快,万分感谢~~selectcast((cast(((cast((count(P0.act_pow

将sql代码速度变快
请高手帮忙把这段代码的速度变快,万分感谢~~

select  cast((cast(((cast((count(P0.act_power_value1)+ count(P1.act_power_value1)
+ count(P2.act_power_value1)+ count(P3.act_power_value1)+ count(P4.act_power_value1)) 
as float)/(nullif(cast((count(P0.act_power_value2)+ count(P1.act_power_value2)
+ count(P2.act_power_value2)+count(P3.act_power_value2)+ count(P4.act_power_value2))
as float),0)))*100)as decimal(18,1)))as Nvarchar)+'%'
from(SELECT  LOCALTIME as LOCALTIME FROM [DB_EasyPilot].[dbo].[WCI0NGNVSV7E48G] )as TIME_STAMP
LEFT OUTER JOIN(SELECT(case when ActivePower>0 then ActivePower else null end )
as act_power_value1,ActivePower As act_power_value2, LocalTime As tstamp_value
from [DB_EasyPilot].[dbo].[WCI0NGNVSV7E48G] 
where WindSpeed >= 3.5 AND WindSpeed <25)as P0 on time_stamp.LOCALTIME =P0.tstamp_value 
LEFT OUTER JOIN(SELECT (case when ActivePower>0 then ActivePower else null end )
as act_power_value1,ActivePower As act_power_value2, LocalTime  As tstamp_value 
from [DB_EasyPilot].[dbo].[WCI0NHNVSV3E48G]
where WindSpeed >= 3.5 AND WindSpeed  <25) as P1 on time_stamp.LOCALTIME =P1.tstamp_value 
LEFT OUTER JOIN(SELECT (case when ActivePower>0 then ActivePower else null end )
as act_power_value1,ActivePower As act_power_value2, LocalTime  As tstamp_value 
from [DB_EasyPilot].[dbo].[WCI4NHNVSV3E48G]
where WindSpeed >= 3.5 AND WindSpeed  <25) as P2 on time_stamp.LOCALTIME =P2.tstamp_value 
 LEFT OUTER JOIN(SELECT (case when ActivePower>0 then ActivePower else null end )
 as act_power_value1,ActivePower As act_power_value2, LocalTime  As tstamp_value 
 from [DB_EasyPilot].[dbo].[WCI4NHNVSV7E48G]
where WindSpeed >= 3.5 AND WindSpeed  <25) as P3 on time_stamp.LOCALTIME=P3.tstamp_value 
LEFT OUTER JOIN(SELECT (case when ActivePower>0 then ActivePower else null end )
as act_power_value1,ActivePower As act_power_value2, LocalTime As tstamp_value 
from [DB_EasyPilot].[dbo].[WCI4NGNVSV3E4AG] 
where WindSpeed >= 3.5 AND WindSpeed  <25)as P4 on time_stamp.LOCALTIME =P4.tstamp_value
where LOCALTIME >='01/12/2011' 
and LOCALTIME <'02/12/2011' 

[最优解释]
LEFT OUTER JOIN(SELECT (case when ActivePower>0 then ActivePower else null end )

每个子查询都由这个 应该可以合并在一起
[其他解释]
(SELECT (case when ActivePower>0 then ActivePower else null end )
as act_power_value1,ActivePower As act_power_value2, LocalTime  As tstamp_value 
from [DB_EasyPilot].[dbo].[WCI0NHNVSV3E48G]
where WindSpeed >= 3.5 AND WindSpeed  <25)
这写都有重复的们为什么要连接这么多次,可以考虑放到临时表里
(SELECT (case when ActivePower>0 then ActivePower else null end ) 


as act_power_value1,ActivePower As act_power_value2, LocalTime  As tstamp_value  into #tb
from [DB_EasyPilot].[dbo].[WCI0NHNVSV3E48G]
where WindSpeed >= 3.5 AND WindSpeed  <25)
--用#tb 去关联


[其他解释]
try:
SELECT(case when ActivePower>0 then ActivePower else null end )
as act_power_value1,ActivePower As act_power_value2, LocalTime As tstamp_value into #
from [DB_EasyPilot].[dbo].[WCI0NGNVSV7E48G] 
where WindSpeed >= 3.5 AND WindSpeed <25

select  cast((cast(((cast((count(P0.act_power_value1)+ count(P1.act_power_value1)
+ count(P2.act_power_value1)+ count(P3.act_power_value1)+ count(P4.act_power_value1)) 
as float)/(nullif(cast((count(P0.act_power_value2)+ count(P1.act_power_value2)
+ count(P2.act_power_value2)+count(P3.act_power_value2)+ count(P4.act_power_value2))
as float),0)))*100)as decimal(18,1)))as Nvarchar)+'%'
from(
SELECT  LOCALTIME as LOCALTIME FROM [DB_EasyPilot].[dbo].[WCI0NGNVSV7E48G] )as TIME_STAMP
LEFT OUTER JOIN # as P0 on time_stamp.LOCALTIME =P0.tstamp_value 
LEFT OUTER JOIN # as P1 on time_stamp.LOCALTIME =P1.tstamp_value 
LEFT OUTER JOIN # as P2 on time_stamp.LOCALTIME =P2.tstamp_value 
LEFT OUTER JOIN # as P3 on time_stamp.LOCALTIME=P3.tstamp_value 
LEFT OUTER JOIN # as P4 on time_stamp.LOCALTIME =P4.tstamp_value
where LOCALTIME >='01/12/2011' 
and LOCALTIME <'02/12/2011' 

[其他解释]
连接字段加索引。
[其他解释]
一空是5个表,每个表中的列名都相同,取这五个表里的数据求的一个百分比。
不能用临时表,临时表还需要删除。不能改动数据库,这段代码是要在excel vba里执行的
[其他解释]
引用:
LEFT OUTER JOIN(SELECT (case when ActivePower>0 then ActivePower else null end )

每个子查询都由这个 应该可以合并在一起


你好,能具体说下怎么合吗?
[其他解释]
重复代码太多 可以用cte
[其他解释]
引用:
重复代码太多 可以用cte


能具体说一下怎么用吗?我是初学者
[其他解释]
引用:
try:

SQL code

SELECT(case when ActivePower>0 then ActivePower else null end )
as act_power_value1,ActivePower As act_power_value2, LocalTime As tstamp_value into #
from [DB_EasyPilot].[dbo].[W……


你好,这个能解释一下吗?
[其他解释]
引用:
try:

SQL code

SELECT(case when ActivePower>0 then ActivePower else null end )
as act_power_value1,ActivePower As act_power_value2, LocalTime As tstamp_value into #


from [DB_EasyPilot].[dbo].[W……


你好,我这一共是5个表,怎么你的代码只有两个表呀?能解释一下吗?
[其他解释]
引用:
引用:
try:

SQL code

SELECT(case when ActivePower>0 then ActivePower else null end )
as act_power_value1,ActivePower As act_power_value2, LocalTime As tstamp_value into #
fr……

你好,这个能解释一下吗?


把你的子查询(我看里面都是一模一样的)结果另存为一个临时表,然后利用临时表做连接再查询,这样会快一些.
[其他解释]
引用:
引用:
try:

SQL code

SELECT(case when ActivePower>0 then ActivePower else null end )
as act_power_value1,ActivePower As act_power_value2, LocalTime As tstamp_value into #
fr……

你好,我这一共是5个表,怎么你的代码只有两个表呀?能解释一下吗?


OH!~

看走眼了,以为是一个表呢.
[其他解释]
我这个查询是5个表,P0到P4分别代表一个表,不是相同的表,是五个不同的表,
[其他解释]
引用:
引用:

引用:
try:

SQL code

SELECT(case when ActivePower>0 then ActivePower else null end )
as act_power_value1,ActivePower As act_power_value2, LocalTime A……


那请问快得多吗?因为我还有另一个数据库,要计算相同的表达式,而那个数据库本身就很慢
[其他解释]
存储过程。。。

热点排行