|
|
|
Можно ли оптимизировать триггер?
|
|||
|---|---|---|---|
|
#18+
Наваял что-то, но оно тормозит немного... мне то что в принципе, а пользователи ругаются :) можно ли это дело как-то оптимизировать? (Взаимодействие идет через ODBC.) по такому же принципу еще и на INSERT и DELETE... порекомендуйте, пожалуйста, что нибудь. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 12:15:45 |
|
||
|
Можно ли оптимизировать триггер?
|
|||
|---|---|---|---|
|
#18+
Насчет оптимизации не знаю, но триггер с типичной ошибкой. Вы его написали с расчетом, что в таблицах inserted и deleted всегда одна запись, на самом деле их может быть много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 12:32:22 |
|
||
|
Можно ли оптимизировать триггер?
|
|||
|---|---|---|---|
|
#18+
если уж надо чтоб триггер работал только с одно вставляемой строкой добавте в начало проверку на количество строк тип такого... select @c = count(*) from inserted if @c>1 begin rollback -- RAISERROR ( 'блаблабалэ...' ) return 1 end ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 13:25:06 |
|
||
|
Можно ли оптимизировать триггер?
|
|||
|---|---|---|---|
|
#18+
по моему правильней будет не Код: plaintext 1. 2. а Код: plaintext 1. еще можно проверять @@rowcount, но по моему, нужно следить тогда за set nocount on, но в этом не уверен... если неправ поправьте... А по поводу оптимизации... дело скорее не в коде, хотя как мне кажется, лучше бы использовать подзапросы, а не выбирать в переменную, и потом подставлять в запрос, а неплохо бы посмотреть индексы на таблицы... Я думаю выборка очень долго идет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 13:34:32 |
|
||
|
Можно ли оптимизировать триггер?
|
|||
|---|---|---|---|
|
#18+
ХМ ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 14:29:04 |
|
||
|
Можно ли оптимизировать триггер?
|
|||
|---|---|---|---|
|
#18+
я бы часть логики вынес в SP.... и отказался бы от exec.... заменил бы на if else.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2002, 02:33:03 |
|
||
|
Можно ли оптимизировать триггер?
|
|||
|---|---|---|---|
|
#18+
2 MiCe: А можно поподробнее вот с этого места, очень рад бы получить рекомендации... хотя б теоретические ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2002, 12:22:18 |
|
||
|
Можно ли оптимизировать триггер?
|
|||
|---|---|---|---|
|
#18+
Set @strSQL = N'UPDATE ПроданоЗаМесяц SET ПроданоЗаМесяц.[' + @DayOfChanges + N'] = ПроданоЗаМесяц.[' + @DayOfChanges + N'] - ' + convert(nvarchar(255),@OldQuantity) + N' WHERE (((ПроданоЗаМесяц.КодТовара)=' + convert(nvarchar(255),@CardID) + N') AND ((ПроданоЗаМесяц.НомерУниверсальногоЛиста)=' + convert(nvarchar(255),@AccountID) + N'))' exec (@strSQL) вынести во внешнию процу и разбить на if else..... if @DayOfChanges = bla UPDATE ПроданоЗаМесяц SET ПроданоЗаМесяц. bla = ПроданоЗаМесяц. bla - @OldQuantity WHERE ПроданоЗаМесяц.КодТовара=@CardID AND ПроданоЗаМесяц.НомерУниверсальногоЛиста=@AccountID else if @DayOfChanges = bla1 ............. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2002, 15:28:17 |
|
||
|
Можно ли оптимизировать триггер?
|
|||
|---|---|---|---|
|
#18+
дабы не тормозить сервер выполнением такого громоздкого подсчета каждый раз после обновления записи я бы сделал бы из триггера запись в служебной табличке - имя процедуры которую нужно запустить для обновления данных и планируемое время запуска - например текущее время + nn секунд . если в течении этого времени происходят еще изменения - запись обновляется с новой отсрочкой по времени. а запуском по этой таблице может заниматься процедура запускаемая переодически из агента (или циклически запущенная с ожиданием по времени ???) наверное можно создавать задания для агента и редактировать их но советовать не могу по тому что сам не пробовал, мысль пришла пока писал это... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2002, 16:02:19 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32067858&tid=1818773]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
80ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 231ms |
| total: | 412ms |

| 0 / 0 |
