Аводирование ненужных обновлений в запросе на обновление - PullRequest
3 голосов
/ 30 июня 2009

В нашем приложении на многих страницах есть «обновление», и когда мы обновляем таблицу, мы обновляем ненужные столбцы, которые тоже не меняются. я хочу знать, есть ли способ избежать ненужных обновлений столбцов? Мы используем хранимые процедуры в .net 2003. По следующей ссылке я нашел решение, но оно не для хранимых процедур.

http://blogs.msdn.com/alexj/archive/2009/04/25/tip-15-how-to-avoid-loading-unnecessary-properties.aspx

Спасибо

Ответы [ 2 ]

1 голос
/ 30 июня 2009

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

Если вы используете хранимую процедуру, то все значения столбцов в любом случае отправляются в базу данных, когда вы вызываете хранимую процедуру, поэтому вы не можете сохранить ее там. SP, вероятно, просто выполнит заурядный оператор UPDATE. RDMS затем вступает во владение. Он не будет физически изменять данные на диске, если он не отличается. Это достаточно умно для этого.

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

0 голосов
/ 24 июля 2009

Когда я работал в финансовой компании по разработке программного обеспечения, производительность была жизненно важной. В некоторых таблицах были сотни столбцов, а операторы обновления были дорогостоящими. Мы создали наш собственный слой ORM (в Java), который включал кэш объектов. Когда мы сгенерировали оператор обновления, мы сравнили текущие значения каждого поля со значениями, которые были при загрузке, и обновили только измененные поля.

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

Я полагаю, что Hibernate и другие крупные ORM все делают для вас такие вещи, если вы не хотите писать их самостоятельно.

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