|
Sybase SA (ASA): Что лучше Computed by или trigger ?
|
|||
---|---|---|---|
#18+
Hi All, Есть обычная таблица, в таблице есть поле X1. Данные в поле X1 формируются путем некоторых преобразований (посредством UDF) других полей этой же таблицы. Есть два варианта как данные записывать в поле X1. 1) Через конструкцию Computed By (вычисляемое поле) 2) Через trigger after insert, update. Вопрос: Какой из этих вариантов менее затратный по ресурсам с точки зрения сервера ? Особенное с учетом того, что по полю X1 будет индекс (скорее всего уникальный) и по этому полю будет часто делаться поиск. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2011, 19:23 |
|
Sybase SA (ASA): Что лучше Computed by или trigger ?
|
|||
---|---|---|---|
#18+
предпложу, что первый способ будет быстрее. Все таки вставка/обновление будет идти в одной операции/транзакции. В случае триггера механизм с точки зрения затрат на транзакцию выглядит тяжелее. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2011, 20:07 |
|
Sybase SA (ASA): Что лучше Computed by или trigger ?
|
|||
---|---|---|---|
#18+
Ggg_oldпредпложу, что первый способ будет быстрее. Все таки вставка/обновление будет идти в одной операции/транзакции. В случае триггера механизм с точки зрения затрат на транзакцию выглядит тяжелее. Присоединяюсь - первый способ будет менее затратен. Эквивалентом ему так же можно назвать триггера BEFORE INSERT/UPDATE. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2011, 23:52 |
|
Sybase SA (ASA): Что лучше Computed by или trigger ?
|
|||
---|---|---|---|
#18+
Ну вместо триггера after insert, update я вполне могу использовать триггер before insert, update, если это по скорости эквивалентно computed by. Но мне казалось что любой триггер (и after и before) будет быстрее (менее затратен для сервера) чем computed by, ведь в триггере данные в поле X1 будут присваиваться только в момент insert и update таблицы, а computed by возможно вычисляется (хотя тут я точно не уверен) динамически, в момент обращения к этому полю, ведь данные для вычисления computed by поля могут через UDF браться на стороне (например из другой таблицы). Или я не прав в своих рассуждениях ? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2011, 13:49 |
|
Sybase SA (ASA): Что лучше Computed by или trigger ?
|
|||
---|---|---|---|
#18+
Stalker4Ну вместо триггера after insert, update я вполне могу использовать триггер before insert, update, если это по скорости эквивалентно computed by. Но мне казалось что любой триггер (и after и before) будет быстрее (менее затратен для сервера) чем computed by, ведь в триггере данные в поле X1 будут присваиваться только в момент insert и update таблицы, а computed by возможно вычисляется (хотя тут я точно не уверен) динамически, в момент обращения к этому полю, ведь данные для вычисления computed by поля могут через UDF браться на стороне (например из другой таблицы). Или я не прав в своих рассуждениях ? Computed By это обычное поле, которое хранит значения, которые вычисляются каждый раз при добавлении или изменении записи. Ничем они по скорости от BEFORE триггеров отличаются не будут, фактически это одно и тоже. При SELECT же уже берутся сохраненные значения в таблице. Если вычисляемое поле ссылается на глобальную переменную или функцию, то правилом хорошего тона можно считать вынос логики вычисления значения в триггер, не будет в дальнейшем проблем с перезагрузкой БД или внезапным падением сервака (все в жизни бывает). Ну, а если хочется сделать поле, которое должно каждый раз динамически вычисляться при обращении к записи - для этого и существуют представления (view). ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2011, 17:00 |
|
Sybase SA (ASA): Что лучше Computed by или trigger ?
|
|||
---|---|---|---|
#18+
Stalker4 динамически, в момент обращения к этому полю, ведь данные для вычисления computed by поля могут через UDF браться на стороне (например из другой таблицы). Или я не прав в своих рассуждениях ? а вот что написано в мануале по поводу вычисления computed by Recalculating computed columns Values of computed columns are automatically maintained by the database server as rows are inserted and updated. Most applications should never need to update or insert computed column values directly. Computed columns are recalculated under the following circumstances: Any column is deleted, added, or renamed. The table is renamed. The table is changed by an ALTER TABLE statement that modifies any column's data type or COMPUTE clause. A row is inserted. A row is updated. Computed columns are not recalculated under the following circumstances: The computed column is queried. The computed column depends on the values of other rows (using a subquery or user-defined function), and these rows are changed. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2011, 21:48 |
|
|
start [/forum/topic.php?fid=55&msg=37419547&tid=2010242]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 118ms |
0 / 0 |