2015-11-14 4 views
0

У меня есть около 1,60,000 строк, полученных за 4 минуты, если я использую следующее.Ошибка производительности запросов SQL Server

SELECT DISTINCT * 
FROM 
    (ABOUT 10 TABLES WITH LEFT OUTER JOIN) 

Но мне нужно извлечь только около 25 столбцов с некоторыми основными операциями на них. Но мой нижний запрос длится бесконечно (более часа).

Col1, Col2 и т. Д., ColA, ColB и т. Д. Представляют столбцы. Также мне нужно иметь DISTINCT, потому что это последняя версия, которая мне нужна.

SELECT DISTINCT 
    Col1, Col2,...Col23, 
    Table1.Description1 + Table1.Description2 as FinalDescription, 
    (CASE WHEN COLA = 'XX' THEN 
      cast(round(COLB,2) as numeric(10,2)) 
      ELSE 
      cast(round(COLB*-1 ,2) as numeric(10,2)) 
    END) AS 'Amount', 
    CASE WHEN ISNULL(COLC,'')='' 
      THEN COLD + 'TO' + COLE 
     WHEN SUBSTRING (COLC ,1 , 3)IN ('XY') 
      THEN COLD+','+ SUBSTRING (COLE ,5 , 12) 
     ELSE COLD + ','+ COLF 
    END as 'Custom_Column' 
FROM 
    (ABOUT 10 TABLES WITH LEFT OUTER JOIN) 

Что мне делать, чтобы улучшить производительность, чтобы получить столбцы в интересующем нас формате?

+1

Во-первых: сравните планы запросов (CTRL-L). Во-вторых: выясните, почему вам нужны разные. У вас неправильное соединение? –

+0

У меня нет внутренних объединений. Требуется различие, поскольку таблицы неправильно разработаны и дублируются. Вот как это устроено. Невозможно изменить настройку. Также у вас нет разрешения на просмотр плана запроса. –

+0

Запустите запрос с удаленным столбцом «Сумма», а затем запустите его снова с удаленным Custom_Coulmn. Вы узнаете, что проблематично. – Adish

ответ

1

Если вы запускаете свой второй запрос без четкого выражения быстрее? Возможно, вы можете рассчитать свой собственный столбец, а затем перенести союз.

SELECT *, 'Amount', 'Custom_Column' 
    FROM Your Query 
    UNION 
    SELECT 0.*, 0 as 'Amount', 0 as 'Custom_Column' 

В любом случае, если вы предоставите план объяснений и сообщите нам, что является вашим db, мы можем дать вам лучшие предложения.

0

Ниже приведено предложение CASE в select. Я просто удалил его из SELECT, но НЕ изменил никаких условий соединения. & он закончил очень быстро. Я не уверен, почему это ниже простого случая является причиной проблемы производительности. Какие-либо материалы о том, как улучшить это?

(CASE WHEN tabled.col5 = 'ABCD' THEN 'ABCD' 

    ELSE 'UVWX' END) AS [Mode], 
Смежные вопросы