优化SQL查询性能

时间:2014-10-07 07:04:53

标签: sql sql-server

我有以下查询。是否可以用其他方式编写,以最大限度地缩短执行时间并优化性能?

declare @addPrefix as Varchar(10)
set @addPrefix = 'ADD02'
select * from dbo.Products where Products.ProdId='P01'  order by 
case @addPrefix
   when 'ADD01' then 'Address01'
   when 'ADD02' then 'Address01'
   when 'ADD03' then 'Address03' 
   when 'ADD04' then 'Address04' 
   when 'ADD05' then 'Address05'  
end, Products.ProdName  desc

5 个答案:

答案 0 :(得分:2)

不要使用*(全部)仅使用您需要的列名称

  select `col1`,`col2` from `table`

此外,如果速度是优先级,我建议您不要对查询进行排序。您可以使用以下代码: -

  select `cols` from `dbo`.`Products` where `Products`.`ProId`='P01'

然后在您的编程语言中,使用if-else-ifswitch-case来获取查询并对数据进行排序。但是,我建议使用sql对几千行的数据进行排序和排列。

答案 1 :(得分:1)

我不明白为什么你在select中做case语句。这将针对select语句中的每一行进行验证。因为它是一个变量而不依赖于select中的任何内容。我会这样做:

DECLARE @order VARCHAR(10)
declare @addPrefix as Varchar(10)

set @addPrefix = 'ADD02' 
SET @order= 
 ( 
    case @addPrefix
    when 'ADD01' then 'Address01'
    when 'ADD02' then 'Address01'
    when 'ADD03' then 'Address03' 
    when 'ADD04' then 'Address04' 
    when 'ADD05' then 'Address05'
    END
 )

然后对变量进行查询。像这样:

select * from dbo.Products 
where Products.ProdId='P01'  
order by 
@order, Products.ProdName  desc

答案 2 :(得分:0)

这是一个非常简单的选择声明,所以我不认为你可以做很多事情。除了在Products表的ProdId列上创建索引之外,我想不出别的。

注意:我是甲骨文家伙

答案 3 :(得分:0)

使用解释计划。这始终是优化信息的第一步。但请注意,在您的情况下,为每个Address01 / 03/04/05分类使用一个。

如果我不得不猜测我会说你的ORDER BY会减慢这个简单的查询速度。

答案 4 :(得分:0)

尝试一下:

declare @addPrefix as Varchar(10)
set @addPrefix = 'ADD02'

select case @addPrefix
   when 'ADD01' then 'Address01'
   when 'ADD02' then 'Address01'
   when 'ADD03' then 'Address03' 
   when 'ADD04' then 'Address04' 
   when 'ADD05' then 'Address05'  
end as orderbycolumn, *
from dbo.Products where Products.ProdId='P01'  
order by orderbycolumn, Products.ProdName  desc