0

У меня есть код, который в основном реализует НИЖЕ логикуКак перекодировать приведенную ниже логику для повышения производительности? Подробности в описании

select something 
from few tables 
where not exists (select query with some logic, say L1) 

union all 

select query with logic L1 

Как вы можете видеть, выберите запрос с логической L1, выполняющиеся в два раза. Это довольно большая логика и может занять некоторое время. Есть ли способ переформатировать код, чтобы сделать выполнение лучше?

+0

Несомненно. Запустите этот запрос и сохраните его в [temp table] (http://stackoverflow.com/a/64891/703644) – TheNorthWes

+0

CTE qill будет более эффективным, imo –

+0

@AdmiralAdama Могу ли я сделать это с помощью только доступа DML? – AntonyP

ответ

1

вы можете использовать CTE. https://msdn.microsoft.com/en-us/library/ms175972.aspx Например, что-то в этом роде;

;With L1 as (Select query with some logic, say L1) 
Select Something 
from few tables 
where not exists (select * from L1) 
union all 
Select * from L1 
+0

Запрос все еще выполняется дважды. Это просто экономит при наборе текста. –

+0

не забыл (nolock), если грязное чтение в порядке –

0

Почему бы не поместить его в одно заявление? Не уверен, что такое структура, но вот идея:

Select 
Something1 
,Something2 
,Something3 
,Case When L1 Is Not Null 'Case1' 
      Else 'Case2' 
     End AS Status 
FROM Some Table or view