[英]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-if
或switch-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.