|
Использование рекордсета для обновления (поиск и вставка) данных
|
|||
---|---|---|---|
#18+
Начало здесь: Оптимизация При обновлении таблиц данными из внешнего источника часто удобно использовать рекордсеты. Способ, приведенный выше действительно можно оптимизировать, если для поиска и вставки применить два независимых рекордсета, а также возможности ADO. Для примера использовал базу norhwind.mdf (MS SQL), таблицу [Order Details] и ее локальную копию OrderDetails как внешние данные. Внимание! 1. Сначала надо прилинковать табл [Order Details] из NorthWind под именем [dbo_Order Details] 2. Выполнение DoIt или data_prepare из кода примера удалит 1/2 данных из табл. [Order Details] Пример: Код: vbnet 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. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209.
На моем компе получил такие результаты: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
Может, кто-нибудь покажет более быстрый способ? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2016, 16:27 |
|
Использование рекордсета для обновления (поиск и вставка) данных
|
|||
---|---|---|---|
#18+
Не знаю, насколько это изменит общее время в целом, но: если попробовать кешировать ссылки на поля рекордсетов? В "чистом и частном" случае, при добавлении в родную табличку с 10 полями 32000 записей (Jet, DAO) разница по времени почти в два раза. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2016, 18:09 |
|
Использование рекордсета для обновления (поиск и вставка) данных
|
|||
---|---|---|---|
#18+
кешировать Это как? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2016, 18:28 |
|
Использование рекордсета для обновления (поиск и вставка) данных
|
|||
---|---|---|---|
#18+
Вот привычная запись, где (в цикле) происходит поиск нужного поля в коллекции полей: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Вот с кешированием полей, вынесенным из цикла: Код: vbnet 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2016, 18:36 |
|
Использование рекордсета для обновления (поиск и вставка) данных
|
|||
---|---|---|---|
#18+
кешировать В моем примере не помогло, да и не должно было - исп. updatebatch. Но спасибо за добавление к коллекции способов, ускоряющих работу с рекордсетами. Хотя, кажется, Вы об этом уже говорили в прежней своей ипостаси. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2016, 12:45 |
|
Использование рекордсета для обновления (поиск и вставка) данных
|
|||
---|---|---|---|
#18+
Можно и так... В моем примере не помогло, да и не должно было - исп. updatebatch... Применение пакетного обновления совершенно не отменило беганий по коллекциям в поисках нужного поля, просто выигрыш по времени оказался мизерным, по сравнению с другими временными затратами. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2016, 13:24 |
|
|
start [/forum/topic.php?fid=45&fpage=113&tid=1613952]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
58ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 333ms |
total: | 485ms |
0 / 0 |