FineTune TSQL SQL Server - PullRequest
       1

FineTune TSQL SQL Server

0 голосов
/ 05 февраля 2011

Приведенный ниже запрос занимает много времени, например, 80 минут, чтобы вернуть 1400 результатов, любая рекомендация, как настроить это

exec sp_executesql N'set ARITHIGNORE ON;
SELECT TOP (@solutionid) 
        b.[solutionid],MAX(b.title) title,
        MIN(a.[Status]) [Status],
        MIN(a.[Audience]) Audience,
        MAX(b.productname) ProductName, 
        MIN(CAST( DateCreated as datetime)) DateCreated ,
        MIN(CAST( DateLastModified as datetime)) DateModified,
        [pc_pres_text]=REPLACE(REPLACE(REPLACE((SELECT [pc_pres_text] as [data()]
FROM    [dbo.view] a
WHERE   a.[solutionid]=b.[solutionid]
FOR XML PATH('''')), ''&lt;'',''<''),''&gt;'',''>'') ,''&amp;'',''&''), 
        ''http://support/supp=''+b.[solutionid] PrimusUrl
FROM    [view] b
INNER JOIN [table] a ON b.solutionid=a.solutionid
WHERE   ((@Audience IS NULL AND [Audience] IS NULL) OR [Audience] LIKE @Audience) AND [DateCreated] > @DateCreated AND 
        ((@Status IS NULL AND [Status] IS NULL) OR [Status] = @Status)
GROUP BY b.[solutionid]
ORDER BY b.[solutionid]',N'@Audience nvarchar(10),@DateCreated datetime,@Status nvarchar(9),@solutionid bigint',
@Audience=N'test%',@DateCreated='2000-01-01 00:00:00',@Status=N'test',@solutionid=500000

Ответы [ 2 ]

1 голос
/ 25 июля 2011

Если вы передаете параметр для @audience и @status, тогда нет необходимости проверять нулевое условие, но это не сильно повлияет на производительность.Если вы не выводите в XML, у вас все еще есть проблемы с производительностью?Включите подсказку с (nolock) или, возможно, (holdlock).Не уверен, что вы можете (удерживать) в представлении - вам может понадобиться разбить его на таблицы для (удержания).Почему приведение типов DateCreated и DateLastModified - это текстовые поля в SQL?Если они текстовые и преобразуются в datetime, то почему бы не сохранить их как datetime?

0 голосов
/ 25 июля 2011

Во-первых, BalamBalam рекомендует использовать nolock.Это действительно может значительно повысить производительность при правильном использовании, но может вызвать грязное чтение и привести к противоречивым результатам.Короче говоря, nolock может быть полезен, но его следует использовать с большой осторожностью и полным пониманием связанных с ним рисков.

Далее, я бы определенно посмотрел на ваши индексы.Отсутствующая функция индекса может дать вам хорошее представление о том, на что конкретно обращать внимание, но я бы наверняка удостоверился, что все столбцы solutionId проиндексированы.

Наконец, у вас есть некоторые общие соображения по поводу производительности, которые могут быть полезны при оптимизации: http://www.sqlservercentral.com/articles/Performance/71001/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...