2014-10-07 5 views
0

У меня есть следующий запрос. Может ли это быть написано каким-то другим способом, чтобы минимизировать время выполнения и оптимизировать производительность?Оптимизация производительности SQL-запросов

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 

ответ

2

Не используйте * (все) использовать только имена столбцов, которые требуют как

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

Кроме того, я рекомендую вам не сортировать запрос, если скорость является приоритетом. Вы можете использовать следующий код: -

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

и затем на вашем языке programmming используйте if-else-if или switch-case получить запрос и сортировки данных. Однако я рекомендую использовать sql для сортировки и упорядочения данных для нескольких тысяч строк.

0

Это довольно простой оператор select, поэтому я не думаю, что вы можете многое сделать. От создания индекса в столбце ProdId в таблице Products я не могу думать ни о чем другом.

Примечание: Я парень Oracle

1

Я не понимаю, почему вы делаете дела заявления в избранном. Это будет подтверждено для каждой строки в инструкции 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 
0

Используйте план объяснения. Это всегда первое место для оптимизации информации. Обратите внимание, однако в вашем случае используйте по одному для каждого типа Address01/03/04/05.

Если бы я должен был догадаться, я бы сказал, что это ваш ORDER BY, который замедляет этот простой запрос.

Смежные вопросы