Подтвердить что ты не робот

Какова была ваша самая крутая оптимизация SQL при медленном выполнении запроса?

Просто поговори со своим коллегой. Он шел с хмелем на своем пути, по дороге к кофеварке.

Я спросил его: "Что с" сводкой "прогулкой?", он сказал: "Я просто сократил запрос на два часа до 40 секунд! Это так хорошо".

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

Но в конечном итоге он гудел.

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

4b9b3361

Ответ 1

Я должен сказать, когда узнал, как создавать и использовать закрытые индексы. Теперь это был ускоритель производительности.

Ответ 2

Использование SQL BULKIMPORT для сокращения нескольких часов унаследованного кода INSERT до менее чем минуты.

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

эй на iphone, который использует sqlite, я сразу же сократил время обработки базы данных с 40 секунд до 2 секунд с использованием эксклюзивных транзакций записи... я был очень счастлив, делая это

так как это был мой первый опыт работы с sql на встроенном устройстве - совершенно отличный от обычного материала, связанного с сервером (индексы, нормализации и т.д.)

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

несколько других менее используемых способов - с помощью xml для обработки нескольких пакетных вставок/обновлений/удалений в 1 раз вместо того, чтобы делать 1 вставку за раз - в sql 2005 это может быть супер классно

Ответ 6

Все об индексах. И избегать глупых вещей, которые делают их бесполезными.

Ответ 7

Изменение порядка условий внутри предложения WHERE, поэтому он сначала фильтрует наиболее дискриминационное условие (в то же время удаляются индексы из недискриминационных столбцов, таких как пол).

Ответ 8

В тот же день я работал над системой CICS/DB2, написанной в COBOL. Многие наши запросы выполняли полное сканирование таблицы (и медленно), хотя у нас были все правильные индексы и предложения WHERE.

Оказалось (и, возможно, это было назад, прошло уже 15 лет), проблема заключалась в том, что мы использовали PIC S9(n) COMP в WORKING STORAGE для параметров запроса, но DB2 хотела PIC S9(n) COMP-3. Используя неправильный тип данных, DB2 должна была выполнить полное сканирование таблицы, чтобы преобразовать значения в базе данных в значение, которое мы проходили. Мы изменили определения переменных, и теперь запросы могли использовать индексы, что резко улучшили нашу производительность.

Ответ 9

У меня был запрос, который был первоначально написан для SQL Server 6.5, который не поддерживал синтаксис соединения SQL 92, т.е.

select foo.baz
from foo
  left outer join bar
  on foo.a = bar.a

вместо этого записывался как

select foo.baz
from foo, bar
where foo.a *= bar.a

Запрос существовал некоторое время, и соответствующие данные накопились для того, чтобы сделать запрос слишком медленным, а затем завершить 90 секунд. К моменту возникновения этой проблемы мы обновили до SQL Server 7.

После того, как я обманул индексы и другие хеджирование Пасхи, я изменил синтаксис соединения на совместимость с SQL 92. Время запроса сократилось до 3 секунд.

Я не думаю, что у меня снова будет это чувство. Я был героем f% $^.

Ответ 11

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

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

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

Ответ 12

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

Ответ 13

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

Если вы задерживаете большое количество параметров, вы можете сэкономить их из строки 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 @[email protected] + @txtJoin + ' Field1 LIKE N''%'' + @dynParameter1 + N''%'') '
        Set @txtJoin = ' And '
    end


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

    SET @[email protected] + ' ORDER BY Field2'


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

END
GO

Ответ 14

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

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

Ответ 15

(Половина пути)

Я переписал хранимую процедуру 3000 строк в LINQ2SQL/С#. Хранимая процедура жонглировала большим количеством данных между кучей неиндексированных временных таблиц. Версия LINQ2SQL читала данные в нескольких словарях и ILookup, а затем я ввел данные вручную с помощью обычного старого кода на С#.

Хранимая процедура заняла около 20 секунд, а версия LINQ2SQL/С# заняла 0,2 секунды.