У меня есть следующая таблица:Лучший подход для высокого чтения таблицы, где запрос зависит от вычисленных значений
StartDate - datetimeoffset(0);
EventDuration - time(0);
RecurrenceEndDate - datetimeoffset(0);
99% запросов на этой таблице, потребуется вычисление RecurrenceEndDate + EventDuration
.
Этого конкретный запрос, чтобы выбрать только соответствующие записи для определенного анализа будет работать очень, очень часто:
SELECT * FROM RRules WHERE
**RecurrenceEndDate + EventDuration** >= START_DATE --Make sure last recurrent event did/will not end before START_DATE, which would make the rule irrelevant for the analysis.
AND StartDate < END_DATE' --Make sure the first occurrence of the event is before END_DATE;
Каков наилучший способ справиться с таким сценарием, где же вычисление требуется практически каждый запрос? Я чувствую, что сохранение значения вычисления в столбце неверно, поскольку оно может быть вычислено.
Pinal Dave углубляется в вычисляемые столбцы, и не является черно-белым относительно того, являются ли сохраненные столбцы быстрее. Если вычисление является сложным, то сохранение должно быть более быстрым, иначе неустановленная может быть быстрее. Вот ссылка https://blog.sqlauthority.com/2010/07/27/sql-server-computed-column-persisted-and-storage/ – DeanOC
да стойкие столбцы - это один из вариантов. Может быть, ваши таблицы уже очень тяжелые. Вторая опция заключается в создании встроенного UDF.Как вы сказали, что есть много вычислений, так что это может быть оба варианта. Возможно, ваша структура таблицы неверна. Возможно, так, как вы заполняете таблицу, неправильно , – KumarHarsh