Повторное использование кода и модульность в SQL

Является ли повторное использование кода и модуляция хорошей идеей для программирования SQL-хранимых процедур?

И если да, то какой лучший способ добавить эти функции в базу кода SQL-кода?

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

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

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

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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