Влияние производительности вычисляемых столбцов в базе данных SQL Server 2005? - PullRequest
1 голос
/ 22 сентября 2008

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

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

Вопрос: Что если мы сделали Стандартное описание в сводной таблице производным / вычисляемым столбцом, который выбирает стандартное описание из стандартной таблицы? Есть ли огромный удар по производительности при отбрасывании вычисляемого столбца в таблице с 100 000-500 000 строк?

Ответы [ 3 ]

1 голос
/ 24 сентября 2008

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

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

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

1 голос
/ 22 сентября 2008

Вычисляемые столбцы хороши, когда они не требуют интенсивных вычислений и не выполняются на большом количестве строк. Ваши вопросы: «Будет ли удар по удаленному вычисленному столбцу». Если этот столбец не является индексом, который используется запросом (НАСТОЯЩАЯ плохая идея для индексации комп. Столбца - я не знаю, можете ли вы зависеть от вашей БД), то его удаление не может снизить производительность (меньше данных для запроса и анализа ).

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

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

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

0 голосов
/ 02 октября 2008

Просто чтобы прояснить проблему для sql2005 и выше:

Эта функциональность была введена для производительность в SQL Server версии 6.5. DBCC PINTABLE имеет очень нежелательные побочные эффекты. К ним относятся потенциал повредить буферный пул. DBCC PINTABLE не требуется и имеет были удалены, чтобы предотвратить дополнительные проблемы. Синтаксис этой команды все еще работает, но не влияет на сервер.

...