2012-02-01 3 views
0

Этот вопрос предназначен только для моих личных будущих знаний, поскольку база данных, к которой он относится, уже идет в определенном направлении.SQL Server 2005 Значение по умолчанию Функция vs Инструкция INSERT Вызываемая функция

В базе данных SQL Server 2005 у нас есть функция, которая возвращает значение DateTime на основе времени Utc и часового пояса локального клиента. Эта функция была применена двумя способами:

  1. Как вызов функции, если значение по умолчанию для столбца
  2. как вызов функции в операторе INSERT в различных хранимых проки.

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

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

ответ

0

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

Если это значение по умолчанию, вы можете быть уверены, что оно всегда будет заполнено независимо от того, как данные будут введены в базу данных. Если у вас есть что-то, что необходимо обновить, если другие данные изменятся, то триггер будет поддерживать его актуальность независимо от того, как данные были изменены. Если несколько хранимых procs могут быть написаны для того, чтобы делать то же самое (которое должно быть вызвано различными приложениями), тогда вы более подвержены риску, что будут использоваться различные методы заполнения поля. Кроме того, вы рискуете, что данные будут введены за пределами вставки proc из окна запроса, сценария, импорта и т. Д. Это особенно верно, если вам может потребоваться перенос больших объемов данных из другой системы или нового клиента и запуск одна запись за раз вставкой proc происходит слишком медленно.

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

0

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

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

Смежные вопросы