繁体   English   中英

优化SQL查询性能

[英]Optimize SQL query performance

我有以下查询。 可以用其他方式编写它以最小化执行时间并优化性能吗?

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

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

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

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

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

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

我不明白您为什么要在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

这是一个很普通的select语句,所以我认为您无能为力。除了在Products表的ProdId列上创建索引外,我什么都没想到。

注意:我是一个Oracle人员

使用解释计划。 这始终是获取优化信息的第一位。 但是请注意,在每种情况下,请对每种Address01 / 03/04/05都使用一个。

如果我不得不猜测,那是因为您的ORDER BY减慢了此简单查询的速度。

尝试这个:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM