Какой была самая крутая оптимизация SQL для медленного запроса? - PullRequest
5 голосов
/ 31 марта 2009

Просто разговариваю с моим коллегой. По пути к кофеварке он шел с прыжком на своем пути.

Я спросил его, «что с« ройной »прогулкой?», Он ответил: «Я только что сократил двухчасовой запрос до 40 секунд! Это так здорово».

Он изменил хранимую процедуру, которая использовала курсоры, и представил временную таблицу, которая была реорганизована из исходного набора данных - я скоро отправлю ему электронное письмо, чтобы получить больше информации о фактической реализации.

Но, в конце концов, он гудел.

Вопрос в том, что за SQL, который запал вам в голову и заставил вас гудеть, оптимизируя медленные запросы?

Ответы [ 15 ]

0 голосов
/ 10 августа 2010

У меня было теплое свечение после того, как я смог использовать запрос кросс-таблицы, чтобы отбросить кучу (технический термин) обработки и поиска ...

Обычно это простые вещи, такие как добавление индексов или получение только тех данных, которые вам нужны, но когда вы обнаружите проблему, которая соответствует ответу, который вы видели раньше ... хорошие времена!

0 голосов
/ 31 марта 2009

Одно слово, динамические запросы

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

Create PROCEDURE dbo.qryDynamic
( 

@txtParameter1 nvarchar(255),
@txtParameter2 nvarchar(255),

AS
SELECT     qry_DataFromAView.*
FROM         qry_DataFromAView
BEGIN

    DECLARE @SQL nvarchar(2500)
    DECLARE @txtJoin nvarchar(50)

    Set @txtJoin = ' Where '

    SET @SQL = 'SELECT     qry_DataFromAView.*
                FROM         qry_DataFromAView'

    IF @txtParameter1 is not null
    Begin
        SET @SQL=@SQL + @txtJoin + ' Field1 LIKE N''%'' + @dynParameter1 + N''%'') '
        Set @txtJoin = ' And '
    end


    IF @txtParameter2 is not null
    Begin
        SET @SQL=@SQL + @txtJoin + ' Field2 LIKE N''%'' + @dynParameter2 + N''%'') '
        Set @txtJoin = ' And '
    end

    SET @SQL=@SQL + ' ORDER BY Field2'


    Exec sp_executesql @SQL, N'@dynParameter1 nvarchar(255), @dynParameter2 nvarchar(255)',  @dynParameter1 = @txtParameter1 ,@dynParameter2 = @txtParameter2

END
GO
0 голосов
/ 31 марта 2009

Разделение одной смехотворно длинной хранимой процедуры, которая выполняла большую часть «если это после 5 часов вечера, верните этот бит sql» и на выполнение которой ушло более 20 секунд, в набор хранимых процедур, которые были вызваны один управляющий sp, и получил время до подсекундных ответов.

0 голосов
/ 31 марта 2009

Ну, у нас была похожая вещь, когда у нас был медленный запрос на сайте Open Freeway. Ответ был не столько в оптимизации запроса, сколько в оптимизации сервера, на котором он был. Мы увеличили лимит и размер кэша, чтобы сервер не выполнял запрос так часто.

Это значительно увеличило скорость системы и в конечном итоге сделало клиента счастливым! :)

Не совсем калибр оригинальных навыков оптимизации сообщений, но это определенно заставило нас гудеть!

0 голосов
/ 31 марта 2009

Я ответил на этот вопрос на предыдущем вопросе ( «Самое большое улучшение производительности, которое вы имели с наименьшим изменением?» ), однако, это такое простое улучшение, но оно есть и может быть так часто упустил из виду, что стоит повторить:

Индексы!

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