Мне задали следующий вопрос: что бы вы изучили, если хотите улучшить производительность хранимой процедуры? Хранимая процедура возвращает некоторое значение и имеет три объединения. Кроме того, чтобы убедиться, что соединения хорошо написаны, что можно сделать, чтобы сделать его лучше? Это был общий вопрос, и код не был предоставлен. Любые идеи?Производительность SQL для возвращаемой хранимой процедуры
ответ
Есть много вещей, которые вы можете сделать, чтобы оптимизировать процедуры, но это звучит как ваш SQL заявление довольно просто. Некоторые вещи, на которые следует обратить внимание:
- Встроенные функции. Это может заставить SQL выполнить оценку строки за строкой и замедлить работу
- Преобразование данных в операторы объединения. Они могут запретить использование индексов.
- Убедитесь, что колонки соединены в/в, где индексируется положение (для больших наборов данных)
Вы можете проверить этот сайт для получения дополнительных советов по повышению эффективности, но я думаю, что я покрывал большую часть того, что вам нужно для простые высказывания:
Проверьте индексы на таблицах, используемых в соединениях. В частности, столбцы, используемые в индексированных соединениях?
Пример -
SELECT *
FROM SomeTable a
JOIN SomeOtherTable b on a.ItemId = b.ItemId
Если эти таблицы большие, индексирование ItemId
в обеих таблицах, как правило, помогает производительности много.
Вы должны сделать то же самое для любых столбцов, которые используются в предложении WHERE
, если в вашем запросе есть один.
WHERE a.ProductId = @SomeVariableYouPassedToTheStoredProc
Индексирование ProductId
может помочь в этом случае.
Производительность запроса - это то, что вы могли бы войти в отверстие кролика, но это логичное (и быстрое) место для начала.
спасибо индекса, за исключением, что я не могу думать ни о чем в общем, все они запрос конкретным, как с помощью TINYINT вместо Int и так далее, не так ли? – sheidaei
Тот факт, что это хранимая процедура, имеет мало общего с ней. Оптимизируйте sql внутри.
Относительно того, как все обычные подозреваемые, в том числе написанные эйджитом, который думает, что вы можете догадаться, что случилось.
Скопируйте sql из proc в подходящий инструмент, приставьте его Explain, чтобы узнать, что происходит.
, так что это не имеет ничего общего с возвращаемыми значениями, верно? вы говорите о sql в самой хранимой процедуре. – sheidaei
Да, ну sql внутри него. По сути, все хранимые процедуры - это именованный и предварительно скомпилированный кусок sql с некоторыми обрезками для передачи значений внутри и снаружи. –
Предполагаю, что есть другие варианты. Например: 1. Каждое из этих объединений может использовать условия ограничения, которые выглядят как 'и permited_used_name = (выберите user_name из user_list where)'. Значение может быть получено один раз во время запуска процедуры (я имею в виду первую строку процедуры), чтобы не перегружать БД многими подобными запросами. 2. Начиная с Oracle11, вы можете объявить функцию как функцию с кешированными результатами (т. Е. Функция вычисляется один раз и не пересчитывается каждый раз при ее вызове), определяя набор таблиц, который изменяет недействительный кеш.
В любом случае вопрос в основном зависит от БД.
Полезно знать о кешировании в Oracle11, можете ли вы сослаться на хороший пример этого онлайн? – sheidaei
Запустите анализатор запросов на утверждение SQL
Спасибо, это может быть хорошей идеей, не подумал об этом – sheidaei
- 1. Выполнение хранимой процедуры для каждой возвращаемой строки?
- 2. Производительность хранимой процедуры Oracle
- 3. Повышенная производительность хранимой процедуры
- 4. SQL Server - производительность выполнения хранимой процедуры
- 5. Проблема с параметром строки хранимой процедуры, возвращаемой из динамического SQL
- 6. Как получить структуру возвращаемой таблицы хранимой процедуры в SQL Server
- 7. Как увеличить производительность хранимой процедуры
- 8. Производительность хранимой процедуры Java Java
- 9. Как повысить производительность хранимой процедуры?
- 10. Производительность SQL: перекомпилируйте и отмените повторное применение для хранимой процедуры
- 11. Предупреждение SQL для хранимой процедуры?
- 12. Параметр sniffing ухудшает производительность хранимой процедуры
- 13. Как повысить производительность этой хранимой процедуры
- 14. Производительность MySQL: необработанный запрос против хранимой процедуры
- 15. улучшить производительность хранимой процедуры в SQL Developer - вложенный цикл
- 16. Тип возвращаемой формы хранимой процедуры Entity Framework изменен
- 17. Как повысить производительность этой хранимой процедуры?
- 18. SQL оптимизации запросов сервера для хранимой процедуры
- 19. Как повысить производительность этой хранимой процедуры?
- 20. Вызов хранимой процедуры из другой хранимой процедуры SQL Server
- 21. хранимой процедуры для отчета
- 22. Вызов хранимой процедуры T-SQL из хранимой процедуры CLR
- 23. SQL Server: транзакция хранимой процедуры
- 24. Вопрос хранимой процедуры SQL Server
- 25. Задача хранимой процедуры SQL Server
- 26. хранимой процедуры параметров SQL Server
- 27. SQL - вызов хранимой процедуры для каждой записи
- 28. Проверка данных для хранимой процедуры SQL Server
- 29. Ресурсы ограничения SQL-сервера для хранимой процедуры
- 30. Синтаксическая ошибка SQL Server для хранимой процедуры
встроенные функции отличаются от курсоров правильно? курсоры также строят ряд за строкой. спасибо за сайт, это отличный источник – sheidaei
Справа, курсоры - это способ прокрутки данных. Встроенные функции - это просто способы расчета данных в вашем запросе. Если вы используете функции для вычисления данных в предложении where, а затем сравниваете это вычисление с другим значением, хороший шанс SQL не будет использовать индексы, и ему может потребоваться вычисление/сравнение по одной строке за раз, а не по массе. –