1

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

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

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

ответ

2

Не совсем ответ, но что не так с использованием просмотров?

1

Вычисляемые столбцы являются точными, если они не являются интенсивными вычислениями и не выполняются на большом количестве строк. Ваши вопросы: «будет ли удар, сбросив вычисленный столбец». Если этот столбец не является индексом, который используется в запросе (REAL bad idea для индексирования comp col - я не знаю, можете ли вы в зависимости от вашей БД), то падение его не может повредить вашу производительность (меньше данных для запроса и хруста).

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

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

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

1

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

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

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

0

Просто чтобы прояснить этот вопрос для sql2005 и до:

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